MySQL 數據庫升級攻略:從 5.7.32 到 8.0.22,輕松解決字符集問題
跟你們聊聊我最近博客升級數據庫遇到的事兒唄。雖然只是簡單的升級,但還挺有意思滴,運氣好得很~
一、準備出發:導出表結構和數據
systemctl stop httpd
tar cvzf /tmp/wordpress_bak.tar.gz wordpress/*
mysqldump -uroot -p --no-data --default-character-set=utf8mb4 --single-transaction --set-gtid-purged=OFF --databases wordpress > /tmp/wordpress.sql
mysqldump -uroot -p --no-create-info --master-data=2 --flush-logs --routines --events --triggers --default-character-set=utf8mb4 --single-transaction --set-gtid-purged=OFF --databases wordpress > /tmp/wordpress_data.sql
- 1.
- 2.
- 3.
- 4.
哦對了,我們得先搞定WordPress里面的所有數據,就像搬家前要摸清楚家里東西放在哪兒的感覺。于是乎,我整出來倆文件,一個叫wordpress.sql,一個叫數據文件。之后,我直接把wp.sql克隆了一份,改個編碼讓它能用utf8mb4字符,這下子新家就能容納更多字符!
cp /tmp/wordpress.sql /tmp/wordpress_utf8mb4.sql
vim /tmp/wordpress_utf8mb4.sql
# :%s/utf8/utf8mb4/g 如果已有utf8mb4會被替換成utf8mb4mb4,注意別替換錯了。
- 1.
- 2.
- 3.
二、卸載舊版本,迎接新生活
老的MySQL5.7.32得先卸掉,跟搬家似的徹底清理。然后檢查現在到底在用哪個版本的MySQL?全部去掉,連/var/lib/mysql目錄也別留下,確保家里干凈利索。接下來,更新一下庫,安裝好mysql80-community;最后,最新的MySQL8.0.22給裝上,現在這地兒就像新裝修一樣嶄新。
三、配置新家:修改my.cnf文件
yum list installed | grep mysql
......
mysql-community-client.x86_64 5.7.32-1.el7 @mysql57-community
mysql-community-common.x86_64 5.7.32-1.el7 @mysql57-community
mysql-community-libs.x86_64 5.7.32-1.el7 @mysql57-community
mysql-community-libs-compat.x86_64 5.7.32-1.el7 @mysql57-community
mysql-community-server.x86_64 5.7.32-1.el7 @mysql57-community
mysql80-community-release.noarch el7-3 @/mysql80-community-release-el7-3.noarch
......
yum remove mysql-community-client.x86_64 mysql-community-common.x86_64 mysql-community-libs.x86_64 mysql-community-libs-compat.x86_64 mysql-community-server.x86_64 mysql80-community-release.noarch
rm /var/lib/mysql/ -rf
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
搞定搬家后,咱就來裝修一下服務器!先備份好/etc/my.cnf,再開始搗鼓服務器。記住,binarylog別弄壞了,但utf8mb4字符集可得換成新的。一啟動mysql數據庫,原來的root密碼自然出來了。接下來運行個安全設置的小腳本,弄個牛逼點的新root密碼,把匿名用戶刪掉,不讓root遠程登錄,別忘了還得刪些沒用的測試庫。
四、避免裝修陷阱:錯誤的配置
cd /etc/yum.repos.d/
mv mysql-community.repo.rpmsave mysql-community.repo
vim mysql-community.repo
# [mysql80-community]
# name=MySQL 8.0 Community Server
# baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
# enabled=1
# gpgcheck=1
# gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
yum clean all
yum makecache
yum install mysql-community-server
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
啊那時的裝修真是讓我害怕得不行!差點聽從那些人的瞎話。越說就越離譜,最后竟然把數據庫也給搞壞了。好在我立馬看清事實,才免于被坑騙。
五、搬進新家:導入數據及配置
房子裝好了,快去買家具溫馨提醒下,我在WP上都試過,目前WordPress只支持后臺管理,比如新建賬號啊、更改別人的設置之類的就不行了,所以還是規規矩矩按照要求操作。
六、新家的第一天:測試和優化
房子弄好了,我去看了看沒啥問題。家里的東西用過后都挺好使的。還有,我給電腦動了點小手術,讓速度快了點兒。
七、新生活的開始:總結和展望
搞定了!博客數據庫升級到了最新版的MySQL8.0.22,還用utf8mb4新增了很多字符。雖然過程有點繁瑣,但終究圓滿成功。博客速度飛快得很,還能顯示更多文字,就像是搬了個新家似的舒心。
cp /etc/my.cnf /etc/my.cnf.bak20201212
vim /etc/my.cnf
## mysql-8.0.x默認開啟binary log,不需要log-bin參數,文件名binlog.
## mysql-8.0.x默認字符集utf8mb4,這里字符集設置統一utf8mb4
#連接建立時執行設置的語句,對super權限用戶無效
init_connect='SET NAMES utf8mb4'
#設置服務端校驗規則,如果字符串需要區分大小寫,設置為utf8mb4_bin
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#忽略應用連接自己設置的字符編碼,保持與全局設置一致
skip-character-set-client-handshake
systemctl start mysqld.service
grep "temporary password" /var/log/mysqld.log
mysql_secure_installation
mysql -uroot -p
mysql> show variables like '%char%set%';
+--------------------------+--------------------------------+
| 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.01 sec)
mysql> show variables like '%collation%';
+-------------------------------+--------------------+
| Variable_name | Value |
+-------------------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_general_ci |
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |
+-------------------------------+--------------------+
4 rows in set (0.00 sec)
mysql> show variables like '%log_bin%';
+---------------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/binlog |
| log_bin_index | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-----------------------------+
6 rows in set (0.00 sec)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
很高興看到你們還在。如果有類似經驗的,來分享下別忘了為這次的更新貢獻個贊,讓大伙兒看看我們有多努力!
作者:小藍
鏈接:http://m.huanchou.cn/content/480.html
本站部分內容和圖片來源網絡,不代表本站觀點,如有侵權,可聯系我方刪除。