天天看點

mysql 主從 xtrabackup,通過xtrabackup重置MySQL生産主從實踐筆記

背景

20.54和20.55本是主從架構,某天發現從庫55伺服器意外關閉,啟動伺服器後,資料庫啟動不了,資料庫日志提示上一次關閉非正常關閉,可能存在資料庫損壞。于是決定重新搭建主從複制。但主庫的資料檔案總共500多G,mysqldump搞不定,決定用xtrabackup。

環境說明

因為以前搭建過主從,是以複制賬号這些不用再做,這裡也不贅述。直接從備份主庫開始

主庫備份

因為主庫的伺服器空間不足,選擇了最重要的6個庫進行搭建主從,指令如下:

innobackupex --defaults-file=/home/mysql3306/mysql-5.6.33/my.cnf --port=3306 --user=root --password=A_isino#888 --socket=/home/mysql3306/mysql-5.6.33/mysql.sock --databases=“dzfp_zzs_kpfw_arm dzfp_zzs_kpfw_arm_lgjt dzfp_zzs_kpfw_arm_sign dzfp_zzs_kpfw_arm_zhwy kpfw_web kpfw_web_kingdee mysql performance_schema” --compres /home/mysql3306/backup

把備份拷貝到備機上:

scp -r 2020-07-28_09-46-26 192.168.20.55:/home/mysql3306/backup #這一步有點慢,靠磁盤讀寫能力和網絡傳輸速度。

關閉從庫資料庫服務:

/home/mysql3306/mysql-5.6.33/bin/mysqladmin shutdown -uroot -pA_isino#888 -S"/home/mysql3306/mysql-5.6.33/mysql.sock"

删除資料目錄下的内容

rm -rf /home/mysql3306/mysql-5.6.33/data/*

or

mv /home/mysql3306/mysql-5.6.33/data /home/mysql3306/mysql-5.6.33/data_bak

切換到MySQL的安裝使用者環境mysql3306使用者

su - mysql3306

如果沒有目錄就建立資料目錄

mkdir /home/mysql3306/mysql-5.6.33/data

還原資料庫

innobackupex --apply-log /home/mysql3306/backup/2020-07-28_09-46-26 #這步很快

innobackupex --defaults-file=/home/mysql3306/mysql-5.6.33/my.cnf /home/mysql3306/backup/2020-07-28_09-46-26 --copy-back #注意參數的順序,這步有點慢

授權資料目錄給使用者mysql3306

chown -R mysql3306:mysql /home/mysql3306/mysql-5.6.33/data

找偏移量:cat xtrabackup_binlog_pos_innodb

[[email protected] data]# cat xtrabackup_binlog_pos_innodb

master3306_bin.002662 1018483324

構造主從複制配置指令:

change master to

master_host=‘192.168.20.54’,

master_user=‘repl’,

master_port=3306,

master_password=‘A_isino#888’,

master_log_file=‘master3306_bin.002662’,

master_log_pos=1018483324;

啟動從庫;

#修改了my.cnf 指定複制5個庫,因為部分庫太大了,空間不夠做備份,暫時不做主從

nohup /home/mysql3306/mysql-5.6.33/bin/mysqld_safe --defaults-file=/home/mysql3306/mysql-5.6.33/my.cnf --user=mysql3306 >/dev/null 2>&1 &

檢查複制狀态

show slave status\G;

停止并删除複制資訊

stop slave;

reset slave;

配置主從複制:

mysql> change master to

-> master_host=‘192.168.20.54’,

-> master_user=‘repl’,

-> master_port=3306,

-> master_password=‘A_isino#888’,

-> master_log_file=‘master3306_bin.002662’,

-> master_log_pos=1018483324;

啟動複制:

start slave;

檢查複制狀态

show slave status\G;

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.20.54

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master3306_bin.002663

Read_Master_Log_Pos: 20087371

Relay_Log_File: relay3306.000002

Relay_Log_Pos: 21757211

Relay_Master_Log_File: master3306_bin.002662

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: dzfp_zzs_kpfw_arm,dzfp_zzs_kpfw_arm_lgjt,dzfp_zzs_kpfw_arm_sign,dzfp_zzs_kpfw_arm_zhwy,kpfw_web,kpfw_web_kingdee

……

到此,主從複制重置成功!