MySQL 遷移並搭建主從(實踐)
第一階段
一、資料的初始化
1、老主庫
關閉sql_log_bin
set sql_log_bin = off;
建立匯出使用者
grant all privileges on *.* to 'dump'@'10.50.31.37' identified by 'rooT_258';
grant all privileges on *.* to 'dump'@'10.1.21.47' identified by 'rooT_258';
grant all privileges on *.* to 'dump'@'172.20.30.16' identified by 'rooT_258';
grant all privileges on *.* to 'dump'@'10.50.30.32' identified by 'rooT_258';
2、新庫
建立備份的路徑
cd /
mkdir backup
cd backup
mkdir backup20180817
在新庫所在伺服器上執行備份老庫的操作
mydumper -h 172.17.0.3 --regex="aa.*" -u root -p 'abc123' -r 300000 -G -E -R -v 3 -t 5 -o /data/backup20181018 > /data/mydumper20181018.log 2>&1 &
引數說明:
-u --user 備份所使用的使用者
-x, --regex 是同正則表示式匹配 'db.table'
-r, --rows 將表按行分塊時,指定的塊行數,指定這個選項會關閉 --chunk-filesize
-e, --enable-binlog 啟用還原資料的二進位制日誌
-V, --version 顯示版本號
-t, --threads 開啟的備份執行緒數,預設是4
-o, --overwrite-tables 如果要恢復的表存在,則先drop掉該表,使用該引數,需要備份時候要備份表結構
檢查備份是否有錯誤
grep -i error /data/mydumper20181018.log
新庫上清空資料庫(先刪表,後drop資料庫)
drop database aa;
關閉binlog,修改/etc/my.cnf檔案,找到
log-bin=mysql-bin
binlog_format=mixed
再這兩行前面加上#,將其註釋掉,再執行/etc/init.d/mysqld restart即可。
用從老庫備份的資料初始化新庫(如果版本不一致,需要手動從老庫匯出使用者資訊,再匯入新庫)
myloader -S /usr/local/mysql/mysql.sock -u root -p 'abc123' -v 3 -t 10 -e y -d /data/backup20181018 >> /data/myloader20181018.log 2>&1 &
檢查匯入是否有錯誤
grep -i error /data/myloader20181018.log
二、資料同步
1、老庫
關閉sql_log_bin
set sql_log_bin=off;
建立資料同步使用者
grant replication slave ,replication client on *.* to 'replication'@'10.1.12.205' identified by 'Replication!2#';
grant replication slave ,replication client on *.* to 'replication'@'10.1.21.118' identified by 'Replication!2#';
grant replication slave ,replication client on *.* to 'replication'@'10.50.16.102' identified by 'Replication!2#';
2、新庫
檢視備份資料的mater的位置
cat /data/backup20181018/metadata
修改檔案/usr/local/mysql/etc/my.cnf,將service-id設定成和老庫不一樣
vi /usr/local/mysql/etc/my.cnf
修改uuid,檔案位置/data/mysql/data/auto.cnf(也就是資料檔案的路徑下),移除auto.cnf,重啟mysql服務重新生成
mv /mysql/data/auto.cnf ..
service mysqld restart
設定主從
CHANGE MASTER TO MASTER_HOST='172.17.0.3', MASTER_USER='repl', MASTER_PASSWORD='mysql', MASTER_PORT=3306,MASTER_LOG_FILE='my-bin.000004', MASTER_LOG_POS=154 for channel 'aa';
開啟主從並觀察同步情況
start slave;
show slave status \G
停止複製stop slave,啟動binlog,修改/etc/my.cnf,重啟mysql服務
log-bin=mysql-bin
binlog_format=mixed
將這兩個引數前面的#去掉
service mysqld restart
重新開啟複製
start slave