您好,登錄后才能下訂單哦!
怎么在linux系統中將mysql5.5升級至mysql5.7?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
下面先分享一個簡單的升級mysql的步驟,后面億速云小編為大家整理了多個補充,大家可以參考一下。
解壓
tar xvf mysql.tar.gz mysql/
./mysql -uroot -pxxxx -h227.0.0.1 -P3306 </home/mysql5.5/bin/all.sql
mkdir data
cd bin
./mysql_install_db --basedir=../ --datadir=../data
PS: 以上升級是在Cent OS上的,但是在中標麒麟我升級的時候,發現不認識上面的語句,需要替換成下面這個初始化語句
./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root --initialize
在my.cnf 中的[mysqld]中添加skip-grant-tables
my.cnf 為數據庫的配置文件
./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root
在新的命令行窗口登錄mysql
./mysql -uroot
use mysql;
update mysql.user set authentication_string=password('xxxx') where user='root';
注釋掉配置文件中的skip-grant-tables
./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root
./mysql -uroot -pxxxx
use mysql;
這個時候:不管運行任何命令,總是提示這個 You must reset your password using ALTER USER statement before executing this statement.
這時執行下面的語句
SET PASSWORD = PASSWORD('xxxx');
use mysql;
grant all privileges on *.* to "root"@"%" identified by "xxxx";
cd bin
./mysql -uroot -pxxxx -h227.0.0.1 -P3306 </home/mysql5.5/bin/all.sql
cd bin
./mysql_upgrade
14. 升級后可能出現查詢語句出現報錯的情況,可執行下面的語句
set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
下面是其他網友的補充
最近有個任務將MySQL從5.5版本升級到5.7,沒升級過數據庫,只能摸索的前進。上網找了一堆資料。目測看只有兩種升級方式
1.Logical Upgrade(邏輯升級):利用mysqldump來直接導出SQL文件,然后起一個新的MySQL5.7庫,將導出的SQL文件導入到新庫中,當然如果采用這種方式的話建議不要用mysqldump而使用mydumper.因為我們公司的數據量很大所以沒有采用這個方法來處理。
2.In-Place Upgrade:這個升級方法簡單快速,就是直接替換原來的MySQL的安裝目錄和/etc/my.cnf配置文件,利用mysql_upgrade腳本來完成系統表的升級。
我們的mysql集群采用的是Atlas讀寫分離,mysql-proxy下有4臺數據庫服務器:
master: 172.16.100.1
slave1:172.16.100.2
slave2:172.16.100.3
slave3:172.16.100.4
當前數據庫版本:”5.5.21
配置文件:/etc/my.cnf
數據目錄:/data/mysql
操作系統版本:CentOS6.9
因為是線上業務不能中斷,所以決定先將其中一臺slave踢出集群,并升級到mysql5.7,然后再講mysql5.7這臺設備加入到集群當中,等數據同步完了再做主備切換,再升級其他的slave節點。
mysql -uuser -ppwd -h227.0.0.1 -P234
查看后端代理庫
mysql> SELECT * FROM backends;
+-------------+-------------------+-------+------+ | backend_ndx | address | state | type | +-------------+-------------------+-------+------+ | 1 | 172.16.100.1:3306 | up | rw | | 2 | 172.16.100.2:3306 | up | ro | | 3 | 172.16.100.3:3306 | up | ro | | 4 | 172.16.100.4:3306 | up | ro | +-------------+-------------------+-------+------+
5 rows in set (0.00 sec)
將服務172.16.100.4從集群中踢出
mysql> remove backend 4
到mysql的官網下載mysql5.7版本mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
解壓mysql5.7
tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
如果你之前的mysql目錄是鏈接的方式創建的話,那么只需要取消鏈接,從新做一下鏈接就可以了
cd /usr/local/
unlink mysql
ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql
如果你之前的mysql目錄不是鏈接的方式,那么重新命名一下,再鏈接一個mysql目錄就可以了
cd /usr/local/
mv mysql mysql5.5
ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql(建議盡可能的使用這種方式,比較方便升級)
mysql5.7以后是不需要進行數據庫初始化的,也就是不用去執行mysql_install_db這個命令
/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql --skip-grant-tables --skip-networking &
ps -ef |grep mysql
如果有出息錯誤的話查看日志信息
/usr/loca/mysql/bin/mysql_upgrade
輸出的結果:
可能會有一些error提示"ALTER TABLE ** FROCE",這些錯誤不用擔心mysql在后面會自動修復repair的時間可能會有點長,要看你的數據庫情況,我這次升級花了兩個多小時
最后如果輸出Upgrade process completed successfully那么就表示升級成功了。
/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql &
查看一下是否升級完了,如果升級成功的話輸出如下
This installation of MySQL is already upgraded to 5.7.23, use --force if you still need to run mysql_upgrade
重做一下主從配置
mysql> change master to master master_host="172.16.100.1",master_user="***",master_passowrd="***",master_log_file=" mysql-bin.000004", master_log_pos=1083;
mysql> start slave;
mysql> show slave status\G;
如果兩個yes就說明正常了
到mysql-proxy設備上面
mysql -uuser -ppwd -h227.0.0.1 -P234
mysql> ADD SLAVE 172.16.100.4
mysql> select * from backends;
如果state的狀態是up的就說明加入集群成功了。
后記:
我第一次升級數據庫,不知道整體思路對不對,先在測試環境上面做的測試,然后又測了幾天沒有問題了才在線上做的升級。僅供參考。
故事是這樣子的,我們公司有幾臺老的mysql版本是5.5的,最近項目做了一些升級增加了幾個字段,用spring-data-jpa自動刷新表結構的時候報錯了,原因是mysql5.5的版本不支持一張表里面有兩個以上的 current_timestamp 作為default value。所以就要考慮升級下數據庫
先到服務器上面看了下版本
再看了下源
哦,順帶提一句,我們公司在用的aws 的 ec2 ,所以都是amz的源
試了下 yum update mysql-server 然后并沒什么卵用,所以繼續往下搞。
網上看了好多都說是先把舊版本的數據庫卸載了再用裝新版本的數據庫,那我的里面的數據咋辦,為了保險起見,我先辦數據庫做了個備份,一個庫一個庫的備份,我看mysql庫里面也配了好多用戶和權限,就順便也把mysql備份了,然后開搞。
yum remove mysql-server
但是我們這邊裝的好像不太一樣,我就把剛才yum查到的幾個都卸載了。
卸載前記得把mysql服務關掉,要不然裝新版本之后用mysql --version 查看是5.7 mysql 登錄進去還是5.5然后重啟服務就各種問題。因為有些文件沒被刪掉,導致新裝的數據庫好奇怪的樣子。。。
yum search mysql57
先看看有什么版本可以選,這個沒啥說的直接
yum install msyql57-server.x86_64
安裝下來就ok,來看看都裝了些啥東西
很奇怪一點就是mysql-config依賴竟然還是5.5的,不過用起來沒發現啥問題
安裝好了之后修改以下my.cnf
我的服務器上面是在/etc/my.cnf 不知道其它的鏡像有沒有變化
在配置的時候我突然想到數據存儲的空間是還在的啊,配過去看看能用不
于是就在my.cnf配了這一行(5.5的好多配置都棄用了,之前的my.cnf里面的都要刪一刪要不然啟動時會報錯)
配置之后果斷啟動服務
service mysqld start
果然報錯了
看了下啟動日志
[ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.
ERROR: Zend_Db_Adapter_Exception: SQLSTATE[HY000] [2002] No such file or directoryAdditionally, an exception has occurred while trying to report this error: Zend_ExceptionNo entry is registered for key 'translate' (Abstract.php:144)
臥槽,這咋辦google一波 搜到了這篇文章https://support.plesk.com/hc/en-us/articles/115001659169-MySQL-fails-to-start-mysql-user-table-is-damaged
具體解決方法如下
a. 登錄到那臺服務器主機上面
b. Add skip-grant-tables in /etc/my.cnf
file under [mysqld]
section 意思就是開啟安全模式(不驗證密碼什么的)
c. service mysqld start
d. mysql_upgrade
e. service mysqld restart
我執行了一下mysql_upgrade
看完上述內容,你們掌握怎么在linux系統中將mysql5.5升級至mysql5.7的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。