MySQL5.7之数据库初始化过程

参考

本文章参考

当通过tar包或者源码包安装完MySQL之后,需要执行数据目录初始化操作

## 如果不指定--datadir;默认是usr/local/mysql目录
bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/mysql --datadir=/opt/mysql/mysql/data

在执行这条命令后mysqld做了什么?

  1. 检查数据目录是否存在,不存在则创建它,创建失败报错mysqld: Can’t create directory ‘/usr/local/mysql/data/’ (Errcode: 2 - No such file or directory)

  2. 如果数据目录存在但是不为空(存在文件或者子目录)则报错退出[ERROR] --initialize specified but the data directory has files in it. Aborting.出现这种情况只需要把这个目录删除、移走、重命名即可。

  3. 在数据目录中创建mysql数据库和里面的表,包括grant表、time zone 表, server-side help 表。

  4. 初始化管理InnoDB表所需的系统表空间以及相关数据结构。

    在mysqld设置InnoDB系统表空间后,表空间特性的一些更改需要建立全新的实例。符合要求的更改包括系统表空间中第一个文件的文件名和撤销日志的数量。如果不希望使用默认值,请确保在运行mysqld之前,MySQL配置文件中已设置了 innodb_data_file_pathinnodb_log_file_size配置参数的设置。同时,请根据需要指定其他影响InnoDB文件创建和位置的参数,如innodb_data_home_dirinnodb_log_group_home_dir
    如果这些选项在您的配置文件中,但该文件不在MySQL默认读取的位置,请在运行mysqld时使用–defaults-extra-file选项指定文件位置。

  5. 创建 ‘root’@‘localhost’ 超级root账户和其他预留账户,有些预留账户是locked状态不能被使用的。

    • 如果有参数 --initialize,root账号会随机生成密码。
    • 如果有参数 --initialize-insecure,root不会设置密码
  6. 服务器初始化用于HELP语句的server-side help 表,服务器不会初始化time zone 表。

  7. 如果为init_file系统变量指定了一个包含SQL语句的文件名,则服务器将执行该文件中的语句。此选项允许您执行自定义的引导序列。

    当服务器以引导模式运行时,某些功能不可用,这限制了文件中允许的语句。这些语句包括与帐户管理(如CREATE USER或GRANT)、复制和全局事务标识符相关的语句。

  8. 退出

<think>嗯,用户现在问的是MySQL 5.7初始化数据库的步骤。之前他们问过如何彻底卸载Nginx,可能是在配置服务器环境,先卸载旧的再安装新的。现在需要初始化MySQL,可能是刚安装完或者需要重置数据库。 首先,我需要考虑用户的操作系统,因为步骤可能有所不同。之前他们提到过Ubuntu/Debian和CentOS,所以这次应该覆盖这两种情况。不过初始化MySQL 5.7通常涉及安全设置,特别是使用mysql_secure_installation脚本,这个在5.7版本中是关键步骤。 接下来,用户可能需要知道安装后的初始配置,比如设置root密码、删除匿名用户、禁止远程root登录等。这些是安全性的基本措施。另外,如果用户是通过源码安装的,初始化步骤可能不同,但大多数情况下用户会使用包管理器安装,所以重点放在包管理器的步骤上。 还要考虑到用户可能是在新服务器上配置,或者是在现有环境中重置数据库。需要提醒他们备份数据,避免数据丢失。同时,MySQL 5.7初始化可能和旧版本有所不同,比如默认启用validate_password插件,导致密码策略更严格,可能需要解释如何处理。 另外,用户可能遇到安装后无法启动服务的问题,或者权限错误,应该在注意事项里提到检查服务状态和日志。还有,如果用户使用的是云服务器,比如AWS或阿里云,可能需要调整安全组设置,允许3306端口,但为了安全,建议使用SSH隧道,这部分可以作为附加建议。 需要分步骤写清楚,从安装开始,到启动服务,运行安全脚本,验证状态,以及创建新用户和数据库。可能用户不仅需要初始化,还需要基本的操作指导,比如登录、创建数据库和用户权限管理。这些步骤对于刚接触MySQL的用户来说很重要。 还要注意,不同发行版的包名可能不同,比如Ubuntu下是mysql-server,而CentOS可能是mariadb-server,不过用户明确问的是MySQL 5.7,可能需要确认正确的包名,特别是CentOS可能需要添加官方仓库才能安装MySQL 5.7,而不是MariaDB。 最后,应该提醒用户版本兼容性和升级考虑,特别是如果他们之后要升级到MySQL 8.0的话。可能还需要提到配置文件的位置,如my.cnf,以及如何调整内存设置等优化步骤,但这些可能属于高级内容,用户当前需求可能只是初始化,所以保持简洁。 总结来说,回答需要覆盖安装、启动、安全配置、验证、基本使用,以及注意事项,确保用户能安全正确地完成MySQL 5.7初始化,避免常见问题。</think>以下是 MySQL 5.7 数据库初始化的完整指南(适用于 Linux 系统): --- ### **1. 安装 MySQL 5.7** #### **Ubuntu/Debian** ```bash # 添加 MySQL APT 仓库 wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb # 选择 MySQL 5.7 # 安装 sudo apt update sudo apt install mysql-server ``` #### **CentOS/RHEL** ```bash # 添加 MySQL YUM 仓库 sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm # 安装 sudo yum install mysql-community-server ``` --- ### **2. 启动 MySQL 服务** ```bash sudo systemctl start mysqld sudo systemctl enable mysqld ``` --- ### **3. 获取临时密码(仅首次安装)** ```bash # CentOS/RHEL 查看日志获取初始随机密码 sudo grep 'temporary password' /var/log/mysqld.log # Ubuntu/Debian 5.7+ 默认无密码,直接进入安全配置 ``` --- ### **4. 运行安全初始化脚本** ```bash sudo mysql_secure_installation ``` **交互步骤说明**: 1. 输入临时密码(若提示) 2. 重置 root 密码(需满足密码策略:8位+大小写+数字+符号) 3. 删除匿名用户 → `Y` 4. 禁止远程 root 登录 → `Y` 5. 删除测试数据库 → `Y` 6. 立即重载权限表 → `Y` --- ### **5. 验证安装** ```bash mysql -u root -p -e "SELECT VERSION();" # 应显示 5.7.x ``` --- ### **6. 创建新用户和数据库(可选)** ```sql -- 登录 MySQL mysql -u root -p -- 创建数据库 CREATE DATABASE mydb; -- 创建用户并授权 CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd!'; GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost'; FLUSH PRIVILEGES; ``` --- ### **7. 配置文件调优(可选)** ```bash sudo vim /etc/mysql/my.cnf # Ubuntu/Debian sudo vim /etc/my.cnf # CentOS/RHEL ``` **常用配置项**: ```ini [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci innodb_buffer_pool_size=1G # 根据内存调整 ``` --- ### **关键注意事项** 1. **密码策略**:MySQL 5.7 默认启用 `validate_password` 插件,若需简化密码: ```sql SET GLOBAL validate_password_policy=LOW; SET GLOBAL validate_password_length=4; ``` 2. **远程访问**(慎用): ```sql CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'password'; GRANT ALL ON *.* TO 'remoteuser'@'%'; ``` 3. **防火墙开放端口**: ```bash sudo ufw allow 3306/tcp # Ubuntu sudo firewall-cmd --add-port=3306/tcp --permanent # CentOS ``` 4. **备份初始化文件**:保留 `/etc/mysql/debian.cnf`(Debian 系)或 `/root/.my.cnf` --- ### **卸载残留清理(如需重装)** ```bash sudo apt purge mysql-* # Ubuntu/Debian sudo yum remove mysql* # CentOS/RHEL sudo rm -rf /var/lib/mysql ``` --- ### **常见问题解决** - **错误 1524**:插件加载失败 → 添加 `--skip-grant-tables` 启动后重置权限 - **忘记 root 密码**: 1. 在 `/etc/my.cnf` 的 `[mysqld]` 下添加 `skip-grant-tables` 2. 重启服务后执行 `UPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='root';` --- 通过以上步骤,您已完成 MySQL 5.7 的安全初始化。建议生产环境部署后立即进行全量备份,并使用 `mysqldump` 或 `xtrabackup` 工具维护数据安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RGB-Lab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值