mysql_install_db程序
的目的是初始化数据目录,包括
mysql
系统数据库中的表。它不会覆盖现有的 MySQL 特权表,也不会影响任何其他数据。
要重新创建权限表,请先停止
mysqld服务器(如果它正在运行)。然后将mysql
data目录下的目录重命名保存,运行
mysql_install_db。假设你的当前目录是MySQL的安装目录,
mysql_install_db位于该
bin
目录下,数据目录名为data
。要重命名
mysql
数据库并重新运行
mysql_install_db,请使用这些命令。
mv data/mysql data/mysql.old
scripts/mysql_install_db --user=mysql
当您运行mysql_install_db时,您可能会遇到以下问题:
mysql_install_db 安装授权表失败
您可能会发现mysql_install_db无法安装授权表并在显示以下消息后终止:
Starting mysqld daemon with databases from XXXXXX mysqld ended
在这种情况下,您应该非常仔细地检查错误日志文件。日志应位于
XXXXXX
错误消息命名的目录中,并应指出mysqld未启动的原因。如果您不明白发生了什么,请在发布错误报告时包含日志。请参阅第 1.6 节,“如何报告错误或问题”。有一个mysqld 进程在运行
这表明服务器正在运行,在这种情况下授权表可能已经创建。如果是这样,则根本不需要运行mysql_install_db ,因为它只需要在您首次安装 MySQL 时运行一次。
当一个服务器正在运行时,安装第二个 mysqld服务器不起作用
当您有一个现有的 MySQL 安装,但想将新安装放在不同的位置时,就会发生这种情况。例如,您可能有一个生产安装,但您想要创建第二个安装以用于测试目的。通常,当您尝试运行第二台服务器时出现的问题是它试图使用第一台服务器正在使用的网络接口。在这种情况下,您应该会看到以下错误消息之一:
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket...
有关设置多个服务器的说明,请参阅 第 5.7 节,“在一台机器上运行多个 MySQL 实例”。
如果您没有在默认位置(
/tmp
目录)或TMPDIR
环境变量中创建临时文件或 Unix 套接字文件的写入权限,如果已设置,则在运行 mysql_install_db或 mysqld服务器时会发生错误。您可以通过在启动mysql_install_db或 mysqld 之前执行这些命令来为临时目录和 Unix 套接字文件指定不同的位置,其中
some_tmp_dir
是您具有写入权限的某个目录的完整路径名:TMPDIR=/some_tmp_dir/ MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock export TMPDIR MYSQL_UNIX_PORT
然后您应该能够运行 mysql_install_db并使用以下命令启动服务器:
scripts/mysql_install_db --user=mysql bin/mysqld_safe --user=mysql &
如果目录下有 mysql_install_db
scripts
,修改第一条命令为scripts/mysql_install_db
.
有一些替代方法可以运行 MySQL 发行版中提供 的mysql_install_db程序:
如果您希望初始权限与标准默认值不同,请使用帐户管理语句(例如
CREATE USER
、GRANT
和 )在设置授权表后REVOKE
更改权限。换句话说,运行 mysql_install_db,然后使用 MySQL 用户连接到服务器,以便您可以发出必要的语句。(见 第 13.7.1 节,“账户管理声明”。)mysql -u root mysql
root
要在具有相同权限的多台机器上安装 MySQL,请将
CREATE USER
、GRANT
和 语句放在一个文件中,并在运行 mysql_install_dbREVOKE
后将文件作为脚本 执行。例如:mysql
scripts/mysql_install_db --user=mysql bin/mysql -u root < your_script_file
这使您能够避免在每台机器上手动发出语句。
可以在先前创建授权表之后完全重新创建授权表。
CREATE USER
如果您只是学习如何使用、GRANT
和REVOKE
并且在运行 mysql_install_db之后进行了如此多的修改以至于您想要清除表并重新开始, 那么您可能想要这样做 。要重新创建授权表,请停止服务器(如果它正在运行)并删除
mysql
数据库目录。然后再次运行mysql_install_db 。