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
<think>我们正在解决MySQL5.7服务无法启动的问题,尤其是由于数据目录(data目录)存在文件导致初始化失败的情况。用户之前尝试初始化时可能遇到错误提示,因为数据目录非空。我们将按照步骤来解决这个问题。根据引用[3]和[4],初始化时如果数据目录非空可能会导致错误。另外,引用[3]提到缺少libaio库的问题,引用[4]提到使用mysqld--initialize代替过时的mysql_install_db命令。因此,我们的解决步骤包括:1.确保系统依赖库(如libaio)已安装,避免初始化命令执行失败。2.清理数据目录,确保初始化时目录为空。3.使用正确的初始化命令(mysqld--initializemysqld--initialize-insecure)重新初始化。4.启动服务。具体步骤:###步骤1:安装必要的系统库在Linux系统中,如果缺少libaio等库,会导致MySQL无法启动。请执行以下命令安装(以CentOS为例):```bashyuminstalllibaio```如果是Debian/Ubuntu系统,则使用:```bashapt-getinstalllibaio1```###步骤2:停止MySQL服务(如果已尝试启动)如果之前尝试启动过MySQL服务,请先停止:```bashsystemctlstopmysqld#或者使用servicemysqlstop,具体取决于系统```###步骤3:清理数据目录确保数据目录(datadir)完全清空。假设你的数据目录是`/var/lib/mysql`(或你在配置文件中指定的目录,如`/data/mysql/mysql3306/data`),执行:```bashrm-rf/var/lib/mysql/*```或者如果你自定义了数据目录,如`/data/mysql/mysql3306/data`,则:```bashrm-rf/data/mysql/mysql3306/data/*```**注意**:删除前请确保该目录下没有重要的数据库文件,如果是生产环境请先备份。###步骤4:确保目录权限正确MySQL需要对该目录有读写权限。设置目录所有者(通常为mysql用户):```bashchown-Rmysql:mysql/data/mysql/mysql3306/data```同时,确保MySQL安装目录(basedir)权限正确,如引用[5]所示:```bashchown-Rmysql:mysql/usr/local/mysql```###步骤5:初始化数据目录使用以下命令初始化(使用`--initialize`会生成一个临时密码,而`--initialize-insecure`则不会生成密码,根据安全要求选择):```bash#进入MySQL的bin目录cd/usr/local/mysql/bin#使用安全初始化(生成随机密码)./mysqld--initialize--user=mysql--basedir=/usr/local/mysql--datadir=/data/mysql/mysql3306/data#或者使用非安全初始化(无密码,初始化后需要手动设置密码)./mysqld--initialize-insecure--user=mysql--basedir=/usr/local/mysql--datadir=/data/mysql/mysql3306/data```执行初始化命令后,如果使用`--initialize`,请记录输出的临时密码,用于首次登录。###步骤6:启动MySQL服务```bashsystemctlstartmysqld#或者servicemysqlstart```如果启动失败,请检查错误日志(通常在数据目录下,如`/data/mysql/mysql3306/data/hostname.err`),根据错误提示进一步解决。###步骤7:修改root密码(如果使用安全初始化)如果使用`--initialize`初始化,使用临时密码登录并修改密码:```bashmysql-uroot-p```输入临时密码后,执行:```sqlALTERUSER'root'@'localhost'IDENTIFIEDBY'你的新密码';FLUSHPRIVILEGES;```###常见问题:1.**初始化时数据目录非空**:这是导致初始化失败的一个常见原因,因此务必清空数据目录。2.**权限问题**:确保MySQL用户(mysql)对数据目录和安装目录有足够的权限。3.**依赖库缺失**:如libaio未安装初始化或启动都会失败(如引用[3]所示)。4.**使用过时的命令**:如引用[4]所示,应使用`mysqld--initialize`而不是`mysql_install_db`。通过以上步骤,应该可以解决数据目录非空导致的初始化失败问题,并成功启动MySQL服务。§§相关问题§§1.如何解决MySQL初始化过程中出现的其他常见错误?2.如何配置MySQL的主从复制(Replication)?3.MySQL中如何创建新的数据库和用户?[^1]:[MySQL5.7安装文档](https://dev.mysql.com/doc/refman/5.7/en/installing.html)[^3]:[libaio安装的重要性](https://stackoverflow.com/questions/10759337/mysql-error-while-loading-shared-libraries-libaio-so-1)[^4]:[MySQL初始化命令更新](https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html)[^5]:[MySQL5.7目录权限设置](https://dev.mysql.com/doc/refman/5.7/en/installing-source-distribution.html)</think> ### 解决 MySQL 5.7 数据目录非空导致初始化失败的完整方案 当 MySQL 5.7 服务无法启动,特别是提示"数据目录存在文件导致初始化失败"时,请按以下步骤操作(结合系统引用[3][4][5]): --- ### 关键步骤:安全清理并重建数据目录 1. **停止 MySQL 服务**(如果已部分启动): ```bash systemctl stop mysqld # CentOS/RHEL # 或 service mysql stop # Ubuntu/Debian ``` 2. **完全清理数据目录**(危险操作!先备份!): ```bash rm -rf /data/mysql/mysql3306/data/* ``` *确保目录路径与您配置的 `datadir` 一致(引用[5]中示例为 `/data/mysql/mysql3306/data`)* 3. **修复目录权限**: ```bash chown -R mysql:mysql /data/mysql/mysql3306/data # 设置所有权 chmod 750 /data/mysql/mysql3306/data # 设置权限 ``` 4. **安装必要依赖**(防止初始化失败): ```bash yum install libaio # CentOS/RHEL (引用[3]) # 或 apt-get install libaio1 libncurses5 # Ubuntu/Debian (引用[1][3]) ``` 5. **初始化数据目录(安全模式)**: ```bash /usr/local/mysql/bin/mysqld --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/data/mysql/mysql3306/data ``` **说明**: - `--initialize-insecure`:跳过临时密码生成(引用[4]) - 确保 basedir/datadir 与实际路径一致(引用[2][5]) 6. **启动 MySQL 服务**: ```bash systemctl start mysqld ``` 7. **设置 root 密码**: ```bash mysql -uroot --skip-password ``` ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '您的新密码'; FLUSH PRIVILEGES; ``` --- ### 避坑指南(常见错误解决) 1. **权限问题**: ```bash chown: cannot access '/data/mysql': No such file or directory ``` → 创建目录结构:`mkdir -p /data/mysql/mysql3306/data` (引用[5]) 2. **依赖缺失错误**: ```bash error while loading shared libraries: libaio.so.1 (引用[3]) ``` → 安装命令见步骤4 3. **初始化失败**: ```bash Child process terminated prematurely with errno=32 (引用[4]) ``` → 确保彻底删除旧数据目录的所有内容 4. **路径错误**: ```bash cd: /usr/local/mysql: No such file (引用[2]) ``` → 检查符号链接:`ln -s /opt/mysql-5.7.42... /usr/local/mysql` --- ### 数据安全操作建议 ```mermaid graph LR A[停止服务] --> B[备份数据] B --> C{目录是否非空?} C -->|是| D[清空数据目录] C -->|否| E[检查权限] D --> E E --> F[初始化] F --> G[启动服务] G --> H[设置密码] ``` > 📌 **重要**:生产环境务必在步骤2前备份数据目录: > ```bash > tar -zcvf mysql_data_backup_$(date +%F).tar.gz /data/mysql/mysql3306/data > ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值