我已经有一个运行生产系统的 MySQL 实例。我想使用同一台机器执行其他 MySQL 操作而不触及另一个实例。我复制了 my.cnf 并重新路由了所有内容(端口、数据目录等)。使用新配置运行 mysqld_safe 立即停止。我查看了日志。一切看起来都很好,直到这一行:
[错误] 致命错误:无法打开和锁定权限表:表“mysql.host”不存在
因此,我运行mysql_install_db --datadir=my/new/db
并得到以下结果:
正在安装 MySQL 系统表... 091120 19:01:24 [错误] /usr/libexec/mysqld: 未知选项 '-e' 系统表安装失败! 检查 opt/mysqld/data/ 中的日志以获取更多信息。 您可以尝试使用以下命令启动 mysqld 守护进程: /usr/libexec/mysqld --skip-grant & 并使用命令行工具 /usr/bin/mysql 连接到 mysql 数据库并查看授权表: 外壳> /usr/bin/mysql -u root mysql mysql>显示表 如果路径有问题,请尝试使用“mysqld --help”。使用 --log 为您提供 opt/mysqld/data/ 中的日志,这可能会有帮助。 有关 MySQL 的最新信息可在以下网址获取: http://www.mysql.com 请查阅 MySQL 手册部分:“运行 mysql_install_db 时出现问题”, 以及描述您的操作系统问题的手册部分。 另一个信息来源是 MySQL 电子邮件档案。 请在给我们发送邮件之前检查以上所有内容! 如果您确实给我们发送邮件,您必须使用 /usr/bin/mysqlbug 脚本!
我没有在调用时提供 -e 选项。我该怎么办?
编辑:我按照错误中的说明操作,但“root”@“localhost”的访问被拒绝。服务器正在运行,相应的端口正在监听。执行跳过授权后,如何登录?
答案1
我不确定 -e 错误意味着什么,但如果遇到问题,您应该能够使用 --skip-grant-tables 选项重新启动 MySQL 并手动填充(和创建)表。
SQL 文件存在于 /usr/share/mysql 下,至少在 RHEL 5 上如此。它们按以下顺序安装:
mysql_system_tables.sql
mysql_system_tables_data.sql
fill_help_tables.sql
请注意,有一个“sed”命令可以将这些文件中的“@current_hostname”替换为您的实际主机名。安装数据库脚本还使用“mkdir”创建测试和 mysql 数据库目录,并设置适当的所有权和权限。
答案2
mysql_install_db --datadir=my/new/db
使用相对路径。当我使用绝对路径时,它可以工作。