MySQL初始化失败error(mysqld --initialize / mysql_install_db) 没有创建系统数据库(prematurely with errno= 32)

在Ubuntu上使用MySQL5.7.10创建数据库实例时,mysqld和mysql_install_db命令因默认安装的MySQL5.6.x影响导致初始化错误32,系统数据库文件未能生成。解决方案是在初始化时添加--no-defaults参数,并确保其位于参数首位,例如:`mysqld --no-defaults --initialize` 或 `mysql_install_db --no-defaults`。参考链接提供了更多详情。

文章目录

问题

在一个备份机上创建多个数据库实例,以此同步部分正式环境的数据库,用于备份等其他用途。
版本:MySQL5.7.10

  • mysql_install_db

命令:

/usr/local/mysql5710/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql5710 --datadir=/mysqldata/data/

报错:

2016-04-12 06:24:58 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize 2016-04-12 06:25:03 [ERROR]  Child process: /usr/local/mysql5710/bin/mysqldterminated prematurely with errno= 32 2016-04-12 06:25:03 [ERROR]   Failed to execute /usr/local/mysql5710/bin/mysqld --bootstrap --datadir=/mysqldata/data
--lc-messages-dir=/usr/local/mysql5710/share --lc-messages=en_US --basedir=/usr/local/mysql5710
-- server log begin --

-- server log end --
  • mysqld

命令:

 /usr/local/mysql5710/bin/mysqld --initialize --user=mysql
--basedir=/usr/local/mysql5710 --da
MySQL 初始化命令的正确性取决于多个因素,包括参数的使用场景、路径的准确性以及是否符合当前 MySQL 版本的要求。根据提供的命令: ```bash ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --lower_case_table_names=1 --user=mysql --initialize ``` 该命令中包含了一些关键参数,以下是对这些参数的分析和说明: - `--defaults-file=/etc/my.cnf`:指定 MySQL 配置文件的路径,通常用于加载配置选项。此路径必须存在且具有可读权限[^4]。 - `--basedir=/usr/local/mysql/`:设置 MySQL安装目录,该目录应包含 MySQL 的可执行文件和其他资源文件[^2]。 - `--datadir=/data/mysql/`:定义数据文件的存储位置,初始化过程中会在此创建系统表和临时 root 用户等信息。确保该目录存在并具有写入权限[^1]。 - `--lower_case_table_names=1`:启用表名小写处理功能,适用于不区分大小写的文件系统(如 Windows)。在 Linux 系统上使用时需谨慎,因为默认情况下文件系统是区分大小写的。如果需要此功能,请确认配置一致性[^1]。 - `--user=mysql`:指定运行 MySQL 进程的用户,确保该用户对数据目录有适当权限[^1]。 - `--initialize`:触发安全的初始化过程,生成随机 root 密码并将其记录到日志中。这是推荐的初始化方式,替代了早期版本中的 `mysql_install_db` 脚本。 ### 注意事项 - 如果使用 `--initialize-insecure` 替代 `--initialize`,则不会设置 root 密码,这在测试环境中可能更方便,但在生产环境中不推荐[^2]。 - 若遇到类似 `/usr/bin/perl: bad interpreter` 的错误,可能是某些脚本依赖 Perl 解释器,而相关路径或 Perl 未正确安装,需检查环境依赖[^3]。 - 在集群环境中,还需考虑额外的配置参数,例如节点角色和通信端口等[^4]。 ### 示例代码 以下是一个验证命令结构完整性的脚本示例: ```bash #!/bin/bash # 定义变量 BASE_DIR="/usr/local/mysql" DATA_DIR="/data/mysql" CONF_FILE="/etc/my.cnf" # 检查路径是否存在 if [ ! -d "$BASE_DIR" ]; then echo "Error: basedir $BASE_DIR does not exist." exit 1 fi if [ ! -d "$DATA_DIR" ]; then echo "Error: datadir $DATA_DIR does not exist. Creating now..." mkdir -p "$DATA_DIR" chown mysql:mysql "$DATA_DIR" fi if [ ! -f "$CONF_FILE" ]; then echo "Warning: Configuration file $CONF_FILE not found." fi # 执行初始化命令 "$BASE_DIR/bin/mysqld" \ --defaults-file="$CONF_FILE" \ --basedir="$BASE_DIR" \ --datadir="$DATA_DIR" \ --lower_case_table_names=1 \ --user=mysql \ --initialize # 检查退出状态 if [ $? -eq 0 ]; then echo "Initialization command executed successfully." else echo "Failed to execute initialization command." exit 1 fi ``` ### 相关问题 1. MySQL 初始化时如何避免权限错误? 2. 如何在不同操作系统上正确设置 `--lower_case_table_names`? 3. 使用 `--initialize-insecure` 和 `--initialize` 有何区别? 4. 如何解决 MySQL 初始化时报错 `/usr/bin/perl: bad interpreter`? 5. 在集群环境下初始化 MySQL 有哪些特殊注意事项?
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值