1. 程式人生 > 其它 >MySQL8 忽略大小寫配置lower_case_table_names = 1 (CentOS7)

MySQL8 忽略大小寫配置lower_case_table_names = 1 (CentOS7)

技術標籤:DevOpscentos伺服器運維

CentOS7安裝了MySQL8社群版後,Navicat連線正常,跑程式,起來後報錯:找不到QRTZ_LOCK表,庫裡查,確實有這表,只不過是小寫,大致定位到應該是資料庫大小寫配置問題。雖定位準確,但還是耗了很久的功夫。

1. 首先檢查防火牆

檢查防火牆是否開啟,以及3306埠配置是否準確

2. MySQL8 忽略大小寫配置lower_case_table_names = 1 (CentOS7)的具體操作

我的做法是:
(1)winscp修改mysql.conf,[mysqld]新增lower_case_table_names=1,儲存

	[mysqld]
	lower_case_table_names=1

(2)刪除/usr/local/mysql/data(建議先備份,因我沒有歷史資料,直接刪除沒有歷史負擔)因我是已經裝完MySQL8以後在使用時提示找不到表才發現需要修改這個“大小寫忽略配置”的,所以在處理時已經有 這個目錄了。
(3)啟動MySQL

	systemctl start mysqld
	systemctl stop mysqld
	systemctl status mysqld.service#可以檢視密碼

(4)初始化資料庫

	mysqld --initialize

(5)修改許可權,提升許可權,外網訪問

	systemctl status mysqld.service#檢視密碼
	用檢視得到的密碼登入後
	
	登入資料庫
	mysql -u root -p
	輸入密碼
	mysql> use mysql;
	
	查詢host
	mysql> select user,host from user;
	
	4.建立host
	如果沒有"%"這個host值,就執行下面這兩句:
	mysql> update user set host='%' where user='root';
	mysql> flush privileges;
	
	5.授權使用者
	任意主機以使用者root和密碼mypwd連線到mysql伺服器
	mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
	mysql> flush privileges;
	
	%代表任何IP,均可以使用root使用者的密碼來訪問到該伺服器上的MySQL資料庫。比如Navicat裡用root的賬號密碼訪問
	%修改為具體的則限定某個具體IP
	mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION; 
	mysql> flush privileges;

3.具體參考:

(1)https://mysql.wisborg.dk/2019/04/14/install-mysql-8-on-linux-with-lower_case_table_names-1/#5-initialize-with-lower_case_table_names-1

(2)https://bugs.mysql.com/bug.php?id=90695

In order to make this work in MySQL 8.0 and linux follow the steps bellow
0) Backup mysql schema before executing the following steps using

備份原有Schema。
mysqldump -h localhost -u root -p mysql > /home/username/dumps/mysqldump.sql
and then stop mysql using

sudo service mysql stop

  1. move or remove /var/lib/mysql directory. This will delete all databases!!!
    因為是首次安裝,沒有歷史負擔,我直接給刪掉了。建議先複製備份到其他位置
    mv /var/lib/mysql /tmp/mysql
    2)Create a new /var/lib/mysql directory and make mysql user as owner

mkdir /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql
3)edit /etc/mysql/mysql.conf.d/mysqld.cnf and add the following line after [mysqld]

lower_case_table_names=1
4) Initialize mysql using the following

sudo systemctl start mysqld

  1. (Optional) Repeat

chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql