Documentation Home

2.10.1.1 运行 mysql_install_db 的问题

mysql_install_db程序 的目的是初始化数据目录,包括 mysql系统数据库中的表。它不会覆盖现有的 MySQL 特权表,也不会影响任何其他数据。

要重新创建权限表,请先停止 mysqld服务器(如果它正在运行)。然后将mysqldata目录下的目录重命名保存,运行 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目录的写入权限

    如果您没有在默认位置( /tmp目录)或 TMPDIR环境变量中创建临时文件或 Unix 套接字文件的写入权限,如果已设置,则在运行 mysql_install_dbmysqld服务器时会发生错误。

    您可以通过在启动mysql_install_dbmysqld 之前执行这些命令来为临时目录和 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_dbscripts,修改第一条命令为scripts/mysql_install_db.

    请参阅第 B.3.3.6 节,“如何保护或更改 MySQL Unix 套接字文件”第 4.9 节,“环境变量”

有一些替代方法可以运行 MySQL 发行版中提供 的mysql_install_db程序:

  • 如果您希望初始权限与标准默认值不同,请使用帐户管理语句(例如 CREATE USERGRANT和 )在设置授权表REVOKE更改权限。换句话说,运行 mysql_install_db,然后使用 MySQL 用户连接到服务器,以便您可以发出必要的语句。(见 第 13.7.1 节,“账户管理声明”。) mysql -u root mysqlroot

    要在具有相同权限的多台机器上安装 MySQL,请将CREATE USERGRANT和 语句放在一个文件中,并在运行 mysql_install_dbREVOKE后将文件作为脚本 执行。例如: mysql

    scripts/mysql_install_db --user=mysql
    bin/mysql -u root < your_script_file

    这使您能够避免在每台机器上手动发出语句。

  • 可以在先前创建授权表之后完全重新创建授权表。CREATE USER如果您只是学习如何使用、 GRANTREVOKE并且在运行 mysql_install_db之后进行了如此多的修改以至于您想要清除表并重新开始, 那么您可能想要这样做 。

    要重新创建授权表,请停止服务器(如果它正在运行)并删除mysql数据库目录。然后再次运行mysql_install_db