Ubuntu18.04-MySQL8.0-表名大小寫敏感-遠程連接


1.卸載

  • 停止服務
sudo service mysql stop
  • 刪除mysql服務
sudo apt-get remove mysql-server 
  • 刪除其他組件
sudo apt-get autoremove
  • 刪除殘留配置文件
sudo dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

過程中會彈出頁面詢問是否刪除數據,全選yes

2.下載安裝

https://dev.mysql.com/get/mysql-apt-config_0.8.11-1_all.deb
默認下載到~/Downloads/路徑下

sudo dpkg -i ~/Downloads/mysql-apt-config_0.8.11-1_all.deb

更新倉庫

sudo apt-get update

安裝mysql服務

sudo apt-get install mysql-server

選好ok回車

安裝選項.png

輸入兩次root密碼

root賬戶密碼.png

第一個官方推薦的,回車

認證方式.png

查看服務是否啟動

ps -ef | grep mysql

啟動了

mysql    29734     1  0 11:34 ?        00:00:10 /usr/sbin/mysqld

如果沒有啟動,啟動服務

sudo service mysql restart

3.表名查詢忽略大小寫

如果使用默認安裝路徑,mysqldump命令直接使用。手動設置了安裝目錄,進入目錄,終端 bin/mysqldump 代替 mysqldump

將初始庫mysql導出到桌面,保存為mysqldump.sql文件,彈出提示時輸入前面填寫的root密碼

mysqldump  -h localhost -u root -p mysql > ~/Desktop/mysqldump.sql

停止服務

sudo service mysql stop

將mysql的數據文件移動到臨時目錄下
這個動作相當於將所有數據庫清空,有重要數據記得備份

sudo mv /var/lib/mysql /tmp/mysql

創建同名文件夾

sudo mkdir /var/lib/mysql

設置該目錄及其子目錄的群組(不用擔心系統上無此用戶)

sudo chown -R mysql:mysql /var/lib/mysql

設置群組讀寫權限

sudo chmod 750 /var/lib/mysql

編輯配置文件

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]下添加lower_case_table_names=1

[mysqld]
lower_case_table_names=1
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log

然后手動初始化MySQL。
defaults-file默認安裝路徑為/etc/mysql/my.cnf,手動安裝需要更改。

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

再次查看/var/lib/mysql目錄權限

ll -d /var/lib/mysql

沒問題

drwxr-x--- 5 mysql mysql 4096 12月 25 13:11 /var/lib/mysql/

如果群組和權限不一致再次執行

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

重新開啟服務

sudo service mysql restart

登陸mysql,密碼處直接回車

mysql -u root -p

登陸后查詢

SHOW VARIABLES where Variable_name like 'lower%';

lower_case_table_names=1,沒問題

mysql> SHOW VARIABLES where Variable_name like 'lower%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 1     |
+------------------------+-------+
2 rows in set (0.01 sec)

查看數據庫,少了sys

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)

切換到mysql

use mysql;

導入前面導出的mysql

mysql> source ~/Desktop/mysqldump.sql
Query OK, 0 rows affected (0.00 sec)
.....
.....

退出

mysql> exit;
Bye

執行mysql_upgrade命令創建sys

sudo mysql_upgrade

登陸mysql測試,root密碼是安裝時設置的密碼

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| haha           |
+----------------+
1 row in set (0.00 sec)

都沒報錯,完成

mysql> select * from haha;
Empty set (0.00 sec)

mysql> select * from HAha;
Empty set (0.00 sec)

說明

MySQL8.0的lower_case_table_names只有在服務初始化時才能配置,服務初始化后,更改lower_case_table_names設置,重啟服務會報錯。
這里將數據移除,采用手動初始化的方式再次初始服務,避免錯誤產生。

主要參照這個回答:https://stackoverflow.com/questions/53103588/lower-case-table-names-1-on-ubuntu-18-04-doesnt-let-mysql-to-start/53175727#53175727

手動初始化參數的官方說明:https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization-mysqld.html (windows的配置可以參考這里)

4.允許遠程訪問

登陸MySQL,執行下面語句

UPDATE mysql.user SET Host = '%' WHERE (Host = 'localhost') and (User = 'root');
mysql> UPDATE mysql.user SET Host = '%' WHERE (Host = 'localhost') and (User = 'root');
Query OK, 1 row affected (0.15 sec)
Rows matched: 1  Changed: 1  Warnings: 0

然后刷新一下

flush privileges;

在其他電腦上嘗試連接

mysql -h 192.168.0.148 -P 3306 -u root -p

還是不行重啟下mysql服務

說明

以前版本的配置文件上需要注釋bind-address = 127.0.0.1,但8.0版本已經沒有這個鍵值對,所以配置文件無需修改

遠程一直不能連接,嘗試ping下地址,ifconfig查看ip地址是否正確

可以參考這篇文章進行調試:https://blog.csdn.net/chengyuqiang/article/details/54285857

5.中文編碼

MySQL8.0似乎不需要修改,登陸數據庫查看

mysql> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.03 sec)

mb4就是most bytes 4的意思,專門用來兼容四字節的unicode,utf8mb4是utf8的超集

6.數據庫導出報錯

本地8.0版本,使用mysqldump命令導出遠程數據庫失敗

mysqldump -h IP地址 -P 端口號 -u root -p  數據庫名稱 >文件名.sql
$ mysqldump -h xxx.xxx.x.xxx -P xxx -u xxx -p  xxx >xxx.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Couldn't execute 'SELECT COLUMN_NAME,                       
JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"')                
FROM information_schema.COLUMN_STATISTICS                
WHERE SCHEMA_NAME = 'topbaby_dev' AND TABLE_NAME = 'balanceofaccount';'
: Unknown table 'column_statistics' in information_schema (1109)

新版的mysqldump默認啟用了一個新標志,通過--column-statistics=0來禁用

$ mysqldump --column-statistics=0 -h xxx.xxx.x.xxx -P xxx -u xxx -p  xxx >xxx.sql

完成。

(未測)修改配置文件
[mysqldump]下插入column-statistics=0

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
column-statistics=0
lower_case_table_names=1
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log

但是重啟服務會報錯,可能也是需要在初始化前配置,這個就沒有測試了。
參考問題:https://serverfault.com/questions/912162/mysqldump-throws-unknown-table-column-statistics-in-information-schema-1109

后續踩到坑再補充...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM