MySQL 8.0.12中的lower_case_table_names设置

时间:2018-08-11 19:53:02

标签: mysql lowercase data-dictionary

我刚刚在Ubuntu 16.0.4中编译了MySQL 8.0.12版本。

按照网站上的说明并制作以下​​my.cnf文件后:

[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/localhost.localdomain.err
user=mysql
secure_file_priv=/usr/local/mysql/mysql-files
local_infile=OFF

log_error = /var/log/mysql/error.log

# Remove case sensitive in table names
lower_case_table_names=1

我收到以下错误:

2018-08-11T19:45:06.461585Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').

我应该更改什么以使数据字典与服务器设置保持一致?

9 个答案:

答案 0 :(得分:1)

根据此link,lower_case_table_names应该与--initialize选项一起设置。

答案 1 :(得分:1)

我遇到了同样的问题,并且如此处https://bugs.mysql.com/bug.php?id=90695所述,现成的不支持。所以我为了使其正常工作而采取的解决方法是 lower_case_table_names=1 on Ubuntu 18.04 doesn't let mysql to start

答案 2 :(得分:1)

到目前为止,我可以使用一种解决方法(我最初发布在askubuntu上):通过在安装后用lower_case_table_names的新值重新初始化MySQL。以下步骤适用于新安装。如果数据库中已经有数据,请先将其导出,然后再导入:

  1. 安装MySQL:
    sudo apt-get update    
    sudo apt-get install mysql-server -y
    
  2. 停止MySQL服务:
    sudo service mysql stop
    
  3. 删除MySQL数据目录:
    sudo rm -rf /var/lib/mysql
    
  4. 重新创建MySQL数据目录(是的,仅删除其内容是不够的):
    sudo mkdir /var/lib/mysql    
    sudo chown mysql:mysql /var/lib/mysql
    sudo chmod 700 /var/lib/mysql
    
  5. lower_case_table_names = 1添加到[mysqld]中的/etc/mysql/mysql.conf.d/mysqld.cnf部分。
  6. 使用--lower_case_table_names=1重新初始化MySQL:
    sudo mysqld --defaults-file /etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console
    
  7. 启动MySQL服务:
    sudo service mysql start
    
  8. 获取MySQL用户root的新生成的密码:
    sudo grep 'temporary password' /var/log/mysql/error.log
    
  9. 通过以下方法更改MySQL用户root的密码:
    sudo mysql -u root -p
    
    并执行:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPa$$w0rd';
    
    之后,也可以通过调用“强化”脚本进行操作:
    sudo mysql_secure_installation
    

之后,您可以通过执行以下命令来验证MySQL中的lower_case_table_names设置:

SHOW VARIABLES LIKE 'lower_case_%';

预期输出:

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 1     |
+------------------------+-------+

答案 3 :(得分:0)

MySQL文档说

lower_case_table_names只能在初始化服务器时进行配置。 禁止在服务器初始化后更改lower_case_table_names设置。

https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html

答案 4 :(得分:0)

要解决此问题,

  1. 只需在bin文件夹(/ usr / local / mysql / bin)中使用以下命令对现有数据库模式进行备份 ./ mysqldump -uroot -p密码> dump.sql

  2. 执行备份后,使用以下命令删除Mysql Home(/ usr / local / mysql /)中的现有数据文件夹 rm -rf数据

  3. 现在将配置添加为“ lower_case_table_names = 1 ”在my.cnf中的 MYSQLD部分(/etc/my.cnf)

    < / li>
  4. 现在使用bin目录(/ usr / local / mysql / bin)中的以下命令初始化数据目录

用于安全模式 ./mysqld --defaults-file = / etc / my.cnf --initialize --user = mysql --console

用于不安全模式 ./mysqld --defaults-file = / etc / my.cnf --initialize-insecure --user = mysql --console

  1. 初始化数据目录后,对于不安全模式,请再次重复安装,并且对于安全模式,请使用在数据运行期间初始化的根密码目录初始化。

  2. 现在使用(/ usr / local / mysql / bin)目录中的命令将现有的转储文件导入Mysql Server中

。/mysql -uroot -p密码

答案 5 :(得分:0)

要解决您的问题,

1。停止mysql:

systemctl stop  mysql

2.clean数据目录或更改默认目录,以下内容适用于新安装,如果您的数据库中已经有数据备份,则请事先

rm -rf /var/lib/mysql

3。将lower_case_table_names = 1插入my.cnf:

[mysqld]
lower_case_table_names=1

4。重新开始

systemctl start mysqld

答案 6 :(得分:0)

我为此写了一个脚本。请阅读答案https://stackoverflow.com/a/58983474/380247。 基本上,您需要重新初始化MySQL数据目录。 参数lower_case_table_names只能在服务器初始化时配置。

答案 7 :(得分:0)

如果现在有人遇到此问题,如果您已经初始化了mysql,这意味着您已经启动并运行了mysql,然后发生了此错误,只需在my.ini文件中将此行注释掉即可。

lower_case_table_names=

答案 8 :(得分:0)

缺少等号(=),更改:

sudo mysqld --defaults-file /etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console 

进入:

sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console