您好,登錄后才能下訂單哦!
下面講講關(guān)于操作mysql5.7升級(jí)到mariadb10.2.16方法,文字的奧妙在于貼近主題相關(guān)。所以,閑話就不談了,我們直接看下文吧,相信看完操作mysql5.7升級(jí)到mariadb10.2.16方法這篇文章你一定會(huì)有所受益。
記錄一個(gè)mysql數(shù)據(jù)庫升級(jí)操作。
客戶環(huán)境不能連外網(wǎng),因此所有程序應(yīng)用的安裝都只能通過提前下載離線軟件安裝包上傳到目標(biāo)云服務(wù)器上進(jìn)行安裝。原來的mysql5.7數(shù)據(jù)庫也是通過rpm軟件包進(jìn)行安裝的。
數(shù)據(jù)庫云服務(wù)器操作系統(tǒng)是紅帽的rhel7.2 ,64位。
客戶的一臺(tái)mysql云服務(wù)器漏洞掃描發(fā)現(xiàn)有漏洞,數(shù)據(jù)庫版本如下:
mysql> status -------------- mysql Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using EditLine wrapper Connection id:15176291 Current database: Current user:mysql@localhost SSL:Not in use Current pager:stdout Using outfile:'' Using delimiter:; Server version:5.5.5-10.0.21-MariaDB-log MariaDB Server Protocol version:10 Connection:Localhost via UNIX socket Server characterset:latin1 Db characterset:latin1 Client characterset:utf8 Conn. characterset:utf8 UNIX socket:/opt/beh/core/mysql/sock/mysql.sock Uptime:107 days 2 hours 11 min 53 sec
版本有點(diǎn)奇怪,直接使用mysql --version看到的版本是mysql server 5.7.2 ,但是上面status中的Server version:卻是5.5.5-10.0.21-MariaDB-log MariaDB Server。反正不管怎么樣,都是需要升級(jí)到 mariadb 10.1以上的版本。到官網(wǎng)上查看最新的穩(wěn)定版本,官網(wǎng)下載地址如下:
https://downloads.mariadb.org/
看到10.2.16是穩(wěn)定版本,該版本的下載地址如下:
http://mariadb.mirror.iweb.com//mariadb-10.2.16/bintar-linux-systemd-x86_64/mariadb-10.2.16-linux-systemd-x86_64.tar.gz
升級(jí)思路:
由于版本跨度太大,不適合逐個(gè)版本升級(jí),采用重新安裝的方法,即將原來的版本卸載,然后重新安裝新的版本。
為了保證數(shù)據(jù)安全,選擇另一臺(tái)同版本操作系統(tǒng)的云服務(wù)器作為備機(jī),安裝一模一樣的數(shù)據(jù)庫版本,并且將原數(shù)據(jù)庫云服務(wù)器的數(shù)據(jù)庫通過mysqldump命令導(dǎo)出,并導(dǎo)入的備機(jī)中。備機(jī)準(zhǔn)備好之后,業(yè)務(wù)應(yīng)用程序修改數(shù)據(jù)庫連接配置連接到備機(jī)數(shù)據(jù)庫。然后再對(duì)原數(shù)據(jù)庫云服務(wù)器進(jìn)行數(shù)據(jù)庫升級(jí)操作。
操作記錄:
數(shù)據(jù)庫備份:
將原數(shù)據(jù)庫進(jìn)行全庫備份: mysqldump -u root -p --all-databases >mysqldump20180712.sql 對(duì)業(yè)務(wù)數(shù)據(jù)庫hive也進(jìn)行單獨(dú)備份: mysqldump -u root -p hive >hive20180712.sql
數(shù)據(jù)庫備機(jī)安裝:
原數(shù)據(jù)庫云服務(wù)器已經(jīng)安裝的rpm包如下:
[root@hadoop001 dbdata]# rpm -qa|grep mysql
mysql-community-client-5.7.20-1.el7.x86_64
mysql-community-common-5.7.20-1.el7.x86_64
mysql-community-libs-5.7.20-1.el7.x86_64
mysql-community-devel-5.7.20-1.el7.x86_64
mysql-community-server-5.7.20-1.el7.x86_64
原數(shù)據(jù)庫云服務(wù)器中還保留著最初的mysql5.7的所有安裝rpm包,將原數(shù)據(jù)庫云服務(wù)器中的rpm安裝包文件全部拷貝到備機(jī)中: scp mysql-community-* hadoop002:/data_china/ywb/ 在備機(jī)中安裝mysql相關(guān)軟件包: yum localinstall mysql-community-* 備機(jī)啟動(dòng)mysql數(shù)據(jù)庫: systemctl start mysql
數(shù)據(jù)庫備機(jī)數(shù)據(jù)導(dǎo)入:
將原數(shù)據(jù)庫中的數(shù)據(jù)庫備份文件傳到備機(jī): scp mysqldump20180712.sql hadoop002:/data_china/ywb/ 在備機(jī)上恢復(fù)mysql數(shù)據(jù)庫: mysql -u root -p <mysqldump20180712.sql 備機(jī)上驗(yàn)證是否恢復(fù)成功: mysql -u root -p mysql>show databases; mysql>use hive; mysql>show tables; mysql>quit;
驗(yàn)證成功之后,通知業(yè)務(wù)應(yīng)用端修改程序端數(shù)據(jù)庫連接配置,使業(yè)務(wù)應(yīng)用連接到備機(jī)數(shù)據(jù)庫。一切正常之后,開始對(duì)原數(shù)據(jù)庫云服務(wù)器進(jìn)行升級(jí)。
原數(shù)據(jù)庫升級(jí):
1、刪除原mysql5.7版本數(shù)據(jù)庫:
首先,將原數(shù)據(jù)庫云服務(wù)器的mysql5.7程序和數(shù)據(jù)庫徹底刪除: rpm -e mysql-community-server-5.7.20-1.el7.x86_64 rpm -e mysql-community-client-5.7.20-1.el7.x86_64 rpm -e mysql-community-common-5.7.20-1.el7.x86_64 rpm -e mysql-community-libs-5.7.20-1.el7.x86_64 rpm -e mysql-community-devel-5.7.20-1.el7.x86_64 注意,執(zhí)行上面的命令的時(shí)候其中有幾個(gè)命令會(huì)失敗,是由于有依賴關(guān)系,相關(guān)順序調(diào)整一下即可。
刪除殘余文件,通過下面2條命令查找殘余文件: find / -name mysql whereis mysql
上面兩個(gè)命令會(huì)查找mysql相關(guān)文件,將相關(guān)的文件能刪除的都刪除,如果為了保險(xiǎn),可以將一些不確定能刪的文件mv到一個(gè)特定目錄。謹(jǐn)慎些還是不會(huì)錯(cuò)。
mysql5.7刪除干凈之后,接下來就是按照新的mariadb 10.2.16版本的數(shù)據(jù)庫:
2、安裝新版本mariadb 10.2.16 數(shù)據(jù)庫
將上面準(zhǔn)備好的軟件安裝包mariadb-10.2.16-linux-systemd-x86_64.tar.gz 上傳到原數(shù)據(jù)庫云服務(wù)器hadoop001中,然后解壓:
tar xzvf mariadb-10.2.16-linux-systemd-x86_64.tar.gz
#更改安裝目錄:注意不要提前建立/usr/local/mysql目錄,直接放過去即可 mv mariadb-10.2.16-linux-systemd-x86_64 /usr/local/mysql/ #進(jìn)入/usr/local/mysql目錄 [root@toydns mysql]#cd /usr/local/mysql #在/usr/local/mysql/support-files/下的配置文件模板,已經(jīng)配置好的部分參數(shù),分別用于不同的環(huán)境,這里說明一下: my-small.cnf 這個(gè)是為小型數(shù)據(jù)庫或者個(gè)人測(cè)試使用的,不能用于生產(chǎn)環(huán)境 my-medium.cnf 這個(gè)適用于中等規(guī)模的數(shù)據(jù)庫,比如個(gè)人項(xiàng)目或者小型企業(yè)項(xiàng)目中, my-large.cnf 一般用于專門提供SQL服務(wù)的云服務(wù)器中,即專門運(yùn)行數(shù)據(jù)庫服務(wù)的主機(jī),配置要求要更高一些,適用于生產(chǎn)環(huán)境 my-huge.cnf 用于企業(yè)級(jí)云服務(wù)器中的數(shù)據(jù)庫服務(wù),一般更多用于生產(chǎn)環(huán)境使用 所以根據(jù)以上幾個(gè)文件,如果個(gè)人使用或者測(cè)試,那么可以使用前兩個(gè)模板;企業(yè)云服務(wù)器或者64G以上的高配置服務(wù)器可以使用后面兩個(gè)模板,另外也可以根據(jù)自己的需求來加大參數(shù)和擴(kuò)充配置獲得更好的性能。 [root@toydns mysql]# ll support-files/ -rw-r--r--. 1 1021 1004 4914 Nov 27 18:32 my-huge.cnf -rw-r--r--. 1 1021 1004 20421 Nov 27 18:32 my-innodb-heavy-4G.cnf -rw-r--r--. 1 1021 1004 4901 Nov 27 18:32 my-large.cnf -rw-r--r--. 1 1021 1004 4914 Nov 27 18:32 my-medium.cnf -rw-r--r--. 1 1021 1004 2840 Nov 27 18:32 my-small.cnf #復(fù)制my-medium.cnf到etc下并改名為my.cnf,修改數(shù)據(jù)庫文件存放的目錄 cp support-files/my-medium.cnf /etc/my.cnf vi /etc/my.cnf # The MariaDB server [mysqld] port = 3306 socket = /tmp/mysql.sock basedir = /usr/local/mysql //mysql目錄 datadir= /var/lib/mysql //數(shù)據(jù)存放位置 innodb_file_per_table = on //每張表一個(gè)單獨(dú)文件,便于管理 skip_name_resolve = on //忽略反向解析,加快訪問速度 skip-external-locking key_buffer_size = 16M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M :wq保存后給權(quán)限 注意,datadir= /var/lib/mysql 這個(gè)目錄需要提前準(zhǔn)備好: mkdir /var/lib/mysql chown mysql:mysql /var/lib/mysql #添加MySQL到PATH環(huán)境變量里面去,省的以后敲命令麻煩 [root@toydns mysql]# vi /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH source /etc/profile.d/mysql.sh 使這個(gè)配置文件及時(shí)生效 #初始化mysql /usr/local/mysql/scripts/mysql_install_db --user=mysql #創(chuàng)建mariadb自啟動(dòng)腳本,并加入開機(jī)啟動(dòng) cp /usr/local/mysql/support-files/systemd/mariadb.service /usr/lib/systemd/system/ 此處有坑,特別注意: /usr/lib/systemd/system/mariadb.service 這個(gè)腳本中有一個(gè)參數(shù) ProtectSystem=full ,需要改為false # Prevent writes to /usr, /boot, and /etc ProtectSystem=false 默認(rèn)情況下ProtectSystem=full,/usr目錄被保護(hù)不能寫入數(shù)據(jù),上面設(shè)置的datadir目錄最初是設(shè)置在/usr/local/mysql/data中,執(zhí)行 systemctl start mariadb 的時(shí)候會(huì)報(bào)錯(cuò)無法寫入XXX文件,因?yàn)?usr整個(gè)目錄都被寫保護(hù)。解決方法有兩個(gè),一個(gè)是將ProtectSystem=full 改為ProtectSystem=false ,一個(gè)就是更改datadir目錄位置,不要放在/usr目錄下。我在這里是2個(gè)地方都改掉。 最后使能服務(wù),使之主機(jī)重啟后能自動(dòng)啟動(dòng)。 systemctl enable mariadb 啟動(dòng)mysql數(shù)據(jù)庫: systemctl start mariadb
MySQL的安全設(shè)置
[root@toydns mysql]# ./bin/mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): //直接回車,默認(rèn)為空 OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y //是否設(shè)置MySQL管理員root的密碼,y設(shè)置,輸入2次 New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y //是否刪除匿名賬戶 y刪除 ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] n //是否不允許root用戶遠(yuǎn)程登陸,n不禁用 ... skipping. By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y //是否刪除test測(cè)試數(shù)據(jù)庫,y刪除 - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y //重新加載可用的數(shù)據(jù)庫表 y 是 ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
3、導(dǎo)入數(shù)據(jù)庫備份
新版本數(shù)據(jù)庫mariadb 10.2.16 安裝完成之后,將原來備份的數(shù)據(jù)庫導(dǎo)入:
mysql -u root -p <mysqldump20180712.sql
注意,如果應(yīng)用端在這段時(shí)間有數(shù)據(jù)更新,需要從備機(jī)導(dǎo)出數(shù)據(jù)庫文件,使用備機(jī)的最新數(shù)據(jù)備份進(jìn)行恢復(fù)。
收尾工作:
所有這些工作完成后,通知應(yīng)用業(yè)務(wù)廠家將應(yīng)用的數(shù)據(jù)庫連接指向升級(jí)后的數(shù)據(jù)庫。
由于原來的數(shù)據(jù)庫版本是mysql5.7,最新的數(shù)據(jù)庫是mariadb10.2.16,應(yīng)用端的java程序連接driver需要改,連接字符串也需要修改。這一塊內(nèi)容不做描述。
應(yīng)用廠家的應(yīng)用程序使用的普通用戶,比如hadoop用戶,用戶的環(huán)境變量和用戶權(quán)限需要做一定的設(shè)置,環(huán)境變量參考在用戶目錄下的 .bashrc 或者 .bash_profile 中增加這一行:
export PATH=/usr/local/mysql/bin:$PATH 修改后運(yùn)行source命令使之生效: source ~/.bashrc 進(jìn)入mysql進(jìn)行權(quán)限賦予: grant all privileges on *.* to hadoop@"%" identified by 'xxxxxx'; flush privileges;
總結(jié):
由于版本跨度太大,mysql5.7到mariadb10.2.16 的升級(jí)其實(shí)都不能叫做“升級(jí)”了,實(shí)際是就是新安裝,關(guān)鍵是找到備機(jī),將原有的數(shù)據(jù)庫備份到備機(jī)上解決后面重裝數(shù)據(jù)庫的后顧之憂。
數(shù)據(jù)庫安裝的方法可以通過聯(lián)網(wǎng)yum 安裝,或者離線通過軟件包進(jìn)行安裝,在這個(gè)案例中,由于客戶云服務(wù)器不能連接外網(wǎng),因此全部的安裝都是使用下載好軟件安裝包進(jìn)行安裝。這種離線安裝方式相對(duì)來說效率更低一些,也容易出錯(cuò)。
對(duì)于以上操作mysql5.7升級(jí)到mariadb10.2.16方法相關(guān)內(nèi)容,大家還有什么不明白的地方嗎?或者想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。