背景
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
……
到此,主從複制重置成功!