小谈 MySQL 第八话·初始化数据目录

目录

一、写在最前

二、数据目录初始化概述

1、常用参数说明

2、初始化方式

三、数据目录初始化期间的服务器操作

1、检查数据目录是否存在

2、创建相关库表

3、初始化系统表空间和管理 Innodb 表所需的相关数据结构

4、'root'@'localhost' 超级用户和其它保留账号创建

5、填充用于 HELP 语句的帮助表

6、检测是否使用 init_file 系统变量命名 SQL 语句文件

7、初始化结束退出

四、详情请参照官网

五、MySQL 安装详解


一、写在最前

安装 MySQL 之后,必须初始化数据目录,包括 MySQL 系统数据库中的表。

但是,如果之后需要用到 XtraBackup 全量备份来恢复数据,则不需要进行初始化,直接恢复备份,然后修改权限重启即可。

而且对于某些 MySQL 安装方法,数据目录初始化是自动的。

Linux 的系统上通用二进制发行版和源代码发行版进行安装必须手动初始化数据目录。

二、数据目录初始化概述

通常,仅在首次安装 MySQL 之后才需要进行数据目录的初始化(非必须)。但是,初始化数据目录的命令不会覆盖任何现有 MySQL 数据库表,因此在任何情况下都可以安全运行。

1、常用参数说明

参数 配置项 参数说明
--defaults-file --defaults-file=/etc/my.cnf 配置文件
--user --user=mysql 管理用户名
--basedir --basedir=/data/mysql-5.7.16/  安装目录
--datadir --datadir=/data/mysql5.7.16data/mysql3220/data 数据目录

--initialize

or
--initialize-insecure

在 Windows 上,使用 --console选项将消息定向到控制台

即:--initialize --console

or --initialize-insecure --console

默认安全安装,初始化时会生成一个root用户和一个随机的密码,并且密码设置为过期,需要你立即修改密码
另外也可以使用该配置初始化,这种方式会生成一个 root 用户,并且密码为空(第一次登录密码空即可),同样需要立即修改密码

2、初始化方式

第一种初始化方式是在安装目录下利用 mysqld 进行初始化(推荐)。

第二种方式是在解压目录下利用 mysql_install_db 进行初始化。另外 mysql_install_db 已经被弃用,官方不再推荐。

三、数据目录初始化期间的服务器操作

当用 --initialize or --initialize-insecure 选项调用时,mysqld 在数据目录初始化序列期间执行了以下操作:

1、检查数据目录是否存在

  • 如果数据目录不存在,则创建它;
  • 如果数据目录存在但不为空(即包含文件或子目录),则生成错误消息后退出
[ERROR] --initialize specified but the data directory exists. Aborting.
# 在这种情况下,删除或重命名数据目录,然后重试。
  • 从 MySQL5.7.11 开始,如果每个参数都以句号(.)开头或使用 --ignore-db-dir 选项命名,则允许现有数据目录不为空
  • 但是 MySQL5.7.16 开始不推荐使用 --ignore-db-dir 选项

2、创建相关库表

在数据目录中创建 MySQL 系统数据库及其表,包括授权表,时区表和服务端帮助表等。

3、初始化系统表空间和管理 Innodb 表所需的相关数据结构

mysqld 初始化 InnoDB 系统表空间,表空间特性的某些变化需要建立一个全新的实例。限定的更改包括系统表空间中第一个文件的文件名和撤消日志的数量。

如果不想使用默认值,请在运行 mysqld 之前确保 MySQL 配置文件中的 innodb_data_file_path 和 innodb_log_file_size 配置参数 设置正确。

还要确保在必要时指定其他影响 InnoDB 文件创建和位置的参数,例如 innodb_data_home_dir 和 innodb_log_group_home_dir。
如果这些选项在您的配置文件中,但是该文件不在默认情况下 MySQL 读取的位置,请加 --defaults-extra-file 在运行 mysqld 时使用该选项指定文件位置 。

4、'root'@'localhost' 超级用户和其它保留账号创建

一些保留账号已锁定,不能被客户端使用,但 'root'@'localhost' 仅供管理使用。

关于 'root'@'localhost' 账号密码取决于你使用了--initialize 还是 --initialize-insecure。

如果使用了 --initialize,则会生成一个随机密码,将其标记为已过期,并编写一条显示密码的消息:

2018-04-20T08:18:12.096949Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2018-04-20T08:18:12.225533Z 0 [Warning] InnoDB: New log files created, LSN=45790

2018-04-20T08:18:12.246302Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.

2018-04-20T08:18:12.299571Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 5df3efc3-4473-11e8-8588-44a842480cba.

2018-04-20T08:18:12.299893Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2018-04-20T08:18:12.300319Z 1 [Note] A temporary password is generated for root@localhost: dORk8uo,Djqx

5、填充用于 HELP 语句的帮助表

6、检测是否使用 init_file 系统变量命名 SQL 语句文件

如果指定 init_file 系统变量来命名 SQL 语句文件,则服务器将执行该文件中的语句。此选项使您能够执行自定义引导序列。

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

7、初始化结束退出

四、详情请参照官网

五、MySQL 安装详解

你可能感兴趣的:(MySQL)