1. 程式人生 > >藍鯨平臺MySQL資料庫管理規範建議

藍鯨平臺MySQL資料庫管理規範建議

MySQL作為藍鯨平臺存取資料的主要資料庫,其穩定性關係到藍鯨平臺的使用體驗,而其資料安全性則可能關係到企業IT資產相關資訊,在安裝和維護藍鯨平臺的過程中應引起足夠重視。本文將對如下幾個出現過的問題進行分析和提供處理建議。這幾個問題分別為:升級,配置日誌自動清理,binlog手動清理維護,表清空,備份。

  藍鯨平臺的MySQL資料庫會在安裝平臺時自動安裝,其版本為5.5.24,架構為主從複製(5臺伺服器情況下),下文分別對提到的幾個問題進行描述。

 

MySQL升級

  

    1.問題分析

  藍鯨平臺預設安裝的MySQL版本為5.5.24,一般不符合安全掃描的版本要求,為了避免在使用過程中由於安全問題需要重新升級資料庫,建議在完成平臺安裝後及時進行資料庫升級,此時資料庫還沒存入業務資料,升級無風險且升級效率高,基於已經在生成環境驗證過的升級經驗,為防止版本跨度過大導致的相容問題,建議升級到MySQL5.5的最高版本即5.5.62,採用邏輯升級的方法,使用mysqldump將低版本的據庫全庫匯出,再匯入到安裝好的新版本。

 

    2. 邏輯升級過程

    1、查當前MySQL程序

  檢查當前執行的MySQL的程序詳情,主要是檢視啟動引數,用於升級後對比 

 [root@paas-1 install]# ps -ef |grep mysql

  root 20407 8526 0 15:10 pts/3 00:00:00 grep --color=auto mysql

  root 29942 1 0 Dec17 ? 00:00:00 /bin/sh /data/bkce/service/mysql/bin/mysqld_safe --datadir=/data/bkce/public/mysql/ --pid-file=/data/bkce/public/mysql/mysql.pid

  mysql 30344 29942 5 Dec17 ? 13:17:37 /data/bkce/service/mysql/bin/mysqld --basedir=/data/bkce/service/mysql --datadir=/data/bkce/public/mysql/ --plugin-dir=/data/bkce/service/mysql/lib/plugin --user=mysql --log-error=/data/bkce/public/mysql//paas-1.err --pid-file=/data/bkce/public/mysql/mysql.pid --socket=/data/bkce/logs/mysql/mysql.sock --port=3306

    2、全庫備份

  使用如下命令進行全庫備份,備份路徑可根據資料量,磁碟效能等進行調整

[root@paas-1 service]# mysqldump -uroot -x -A -E -R >/tmp/alldbback.sql

    3、備份安裝目錄,資料目錄

  停止資料庫服務,並對basedir,datadir目錄進行備份,升級前一定要進行備份,避免出現意外進行回退 

 [root@paas-1 service]# mkdir /data/backup

  [root@paas-1 service]# mv mysql/ /data/backup/

  [root@paas-1 service]# cd /data/bkce/public/

  [root@paas-1 public]# mv mysql /data/backup/mysql_data

    4、新版本解壓安裝

  使用二進位制的包進行解壓安裝,下載5.5.62版本的壓縮包,上傳至安裝目錄進行解壓,建立軟連線為mysql  

[root@paas-1 service]# tar zxf /tmp/mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz

  [root@paas-1 service]# ln -s mysql-5.5.62-linux-glibc2.12-x86_64/ mysql

  5、初始化資料庫

  對資料目錄進行初始化 

 [root@paas-1 public]# mkdir mysql

  [root@paas-1 mysql]# cd /data/bkce/service/mysql

  [root@paas-1 mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/data/bkce/service/mysql --datadir=/data/bkce/public/mysql/

  Installing MySQL system tables...

  181227 15:39:10 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.

  181227 15:39:10 [Note] /data/bkce/service/mysql/bin/mysqld (mysqld 5.5.62-log) starting as process 24766 ...

  OK

  Filling help tables...

  181227 15:39:11 [Note] /data/bkce/service/mysql/bin/mysqld (mysqld 5.5.62-log) starting as process 24790 ...

  OK

  To start mysqld at boot time you have to copy

  support-files/mysql.server to the right place for your system

  PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

  To do so, start the server, then issue the following commands:

  /data/bkce/service/mysql/bin/mysqladmin -u root password 'new-password'

  /data/bkce/service/mysql/bin/mysqladmin -u root -h 132.108.252.43 password 'new-password'

  Alternatively you can run:

  /data/bkce/service/mysql/bin/mysql_secure_installation

  which will also give you the option of removing the test

  databases and anonymous user created by default. This is

  strongly recommended for production servers.

  See the manual for more instructions.

  You can start the MySQL daemon with:

  cd /data/bkce/service/mysql ; /data/bkce/service/mysql/bin/mysqld_safe &

  You can test the MySQL daemon with mysql-test-run.pl

  cd /data/bkce/service/mysql/mysql-test ; perl mysql-test-run.pl

  Please report any problems at http://bugs.mysql.com/

    6、修改配置並啟動

  因原my.cnf配置檔案未設定pid file,新版啟動時會根據主機名自動生成,跟原程序下的pid檔案不符,需要在配置檔案裡新增如下配置: 

 pid-files=

  vim /etc/my.cnf

  [mysqld]

  /data/bkce/public/mysql/mysql.pid

  啟動資料庫:

 /data/bkce/service/mysql/bin/mysqld_safe &

    7、匯入資料

  登入mysql,確認版本已經升級至5.5.62,接下來匯入備份的資料

mysql -uroot </tmp/alldbback.sql

  等待其匯入完成即可。

    8、恢復mysql.sh檔案

  在藍鯨平臺中控機上控制mysql服務的啟停,是通過呼叫安裝目錄下的mysql.sh檔案實現的,所以需要將該檔案恢復到新版安裝後的目錄下  

[root@paas-1 mysql]# cd /data/backup/mysql/bin/

  [root@paas-1 bin]# cp mysql.sh /data/bkce/service/mysql/bin/

    9、升級確認

  通過中控機檢視及啟停mysql,檢查是否正常  

[root@paas-1 mysql]# cd /data/install/

  [root@paas-1 install]# ./bkcec status mysql

  [root@paas-1 install]#./bkcec stop mysql

  [root@paas-1 install]#./bkcec start mysql

  檢查藍鯨平臺,檢視資料庫呼叫是否正常。到此,整個升級過程完成。

 

MySQL配置

  1.問題分析

我處理過的藍鯨平臺MySQL問題,很多是因為磁碟空間不足導致,而磁碟空間不足多是由於binlog日誌過多而未及時清理造成,藍鯨在客戶處使用過程中由於沒有專門的運維團隊,通常很少去關注後臺伺服器的情況,所以binlog自動清理的機制強烈建議開啟。

 

  2.測試過程

  1、設定binlog自動清理

  引數expire_logs_days表示超過該引數值的binlog日誌會自動清理,可以根據伺服器磁碟空間來確定該值的設定,前提是保證日誌保留時間大於資料庫備份頻率,比如備份是7天一次全備,則expire_logs_days的值應大於7,空間充足情況下一般建議設定為7天或者15天。

  設定方法,在引數檔案中配置expire_logs_days=7即可在重啟MySQL後生效。也可以在MySQL命令列直接設定:

 

 mysql> set global expire_logs_days=7;

  在命令列設定不會立即對日誌進行清理,需要達到如下幾種觸發條件之一:

  1、binlog大小超過max_binlog_size

  2、手動執行flush logs

  3、MySQL服務重新啟動時

  所以如果是MySQL使用過程中命令列設定了該引數,可以使用flush logs切換日誌觸發清理,此時需要注意清理需要佔用伺服器I/O資源,應在不影響使用情況下執行。

 

binlog手動清理維護

    1.問題分析

  當磁碟空間由於binlog佔用空間不足,MySQL服務已經掛起時,需要手動清理binlog日誌。處理過的幾次問題是管理員在清理binlog時刪除了所有的binlog日誌,磁碟空間釋放後,重啟MySQL服務發現啟動失敗,其原因就是binlog被全部清理後,MySQL服務啟動需要寫入日誌到最新的一個binlog,而其記錄的最後一個binlog找不到,所以會報錯啟動失敗。

  1、手動清理的正確方法

  手動清理binlog日誌時,需要保留最新一個日誌,保證資料庫重啟後可以檢測到最新的寫入日誌,確認最後一個日誌,可以根據日誌名稱(序號遞增)或者寫入時間來確定。

  2、刪除所有日誌後的處理方法

  如果已經刪除了所有的日誌而無法啟動資料庫,此時可以按照如下方法處理:

  在datadir目錄下找到mysql-bin.index檔案,該檔案是記錄資料庫裡的binlog資訊,清空該檔案內容,重啟資料庫,此時日誌會重置為1號,資料庫恢復正常。

 

表清空操作

 1.問題分析

  由於資料庫裡某些日誌表太大,影響查詢和插入表的效率,有時會做清空表的操作,而管理員維護MySQL資料庫時習慣使用圖形工具如Navicat,當表的資料比較大時,從圖形工具點選清空表,系統會卡住,原因是工具裡的情況表是delete的操作,資料庫執行時會每條資料進行刪除並記錄redo,undo日誌,佔用資料庫資源較大導致的資料庫hang住。

  1、表清空的正確方法

  如果確認表資料是不需要的,請使用truncate的方式情況表,效率非常高且佔用資源少,SQL語法如下:

mysql> truncate table_name;

  

MySQL備份

  1.問題分析

  資料庫最重要的就是資料,資料的安全高於一切,而完善的備份是資料安全的最後一道防線,藍鯨平臺是一個企業級的平臺,其儲存的資料也是至關重要的,所以備份策略必須合理制定。MySQL 最常用的備份方式分為邏輯備份mysqldump,物理備份xtrabackup,當資料量不大,備份時間在1小時內可以完成的,使用mysqldump即可,更大資料量則需要考慮使用xtrabackup,下面主要介紹mysqldump。

 

  2.備份通用性命令

  mysqldump是個很靈活的工具,有很多引數可以在備份時使用,不過對於藍鯨平臺的mysql備份,建議使用如下通用的備份命令即可:

mysqldump -uroot -p --all-databases --master-data=2 --flush-logs --single-transaction > /backup/dbfull-`date +%F`.sql

  如果需要壓縮備份檔案,可以用如下命令:

mysqldump -uroot -p --all-databases --master-data=2 --flush-logs --single-transaction |gzip > dbfull-`date +%F`.tar.gz

  該命令備份所有的資料庫,記錄備份時binlog的位置(用於建立主從關係的複製起始點或是恢復到指定時間點),以事務的方式備份,不會影響主庫執行。

  備份如果是在本地磁碟,還需要定期清理備份檔案,比如清理30天前的備份檔案,如下清理指令碼可以參考:

 find /backup -mtime +30 -name "dbfull-*.sql" -exec rm -rf {} \;

 

隨著藍鯨平臺在企業級的廣泛使用,其儲存資料的MySQL資料庫應確保資料安全和MySQL服務平穩執行,本文所列舉的幾個問題都是常見的導致平臺無法使用的問題,其處理方法也都是驗證過並在生成環境使用的方式,可以作為處理該