在 MySQL 8 中更改 lower_case_table_names 的值

我们可以更改lower_case_table_names 设置的唯一时间是与初始化MySQL 数据目录(mysqld -initialize)有关。
所以你需要创建一个逻辑备份,然后完全重新初始化MySQL,然后恢复备份。

可以使用的步骤示例如下:

  1. 将数据库置于只读模式,例如:
mysql> SET GLOBAL super_read_only = ON;
Query OK, 0 rows affected (0.00 sec)

还建议关闭应用程序。

  1. 验证没有重复的模式或者表名:
mysql> SELECT LOWER(SCHEMA_NAME), COUNT(*)
       FROM information_schema.SCHEMATA
       GROUP BY LOWER(SCHEMA_NAME)
       HAVING COUNT(*) > 1;
Empty set (0.00 sec)
mysql> SELECT TABLE_SCHEMA, LOWER(TABLE_NAME), COUNT(*)
       FROM information_schema.TABLES
       GROUP BY TABLE_SCHEMA, LOWER(TABLE_NAME)
       HAVING COUNT(*) > 1;
Empty set (0.02 sec)

如果发现任何重复的标识符,则我们不能在不首先重命名重复项之一的情况下更改 lower_case_table_names。

  1. 使用 mysqlpump 或者 mysqldump 创建逻辑备份。
    如果我们使用 mysqlpump,请确保包含 -users 选项以包含用户及其授权。

  2. 验证我们可以恢复备份并且恢复的数据库按预期工作。

  3. 关闭 MySQL。

  4. 删除 datadir 下的所有文件以及我们可能用于 MySQL 文件的任何其他目录。
    提示:在删除之前复制所有文件。

  5. 更新 my.cnf 以包含 lower_case_table_names 的新值。

  6. 使用带有 mysqld 的 -initialize 选项重新初始化 MySQL,例如:

shell$ mysqld --defaults-file=/etc/my.cnf --initialize
  1. 重新初始化并更改 root 密码后,恢复备份。

  2. 验证一切正常。

日期:2020-09-17 00:11:06 来源:oir作者:oir