MySQL 主從備份
1:檢查mysql master 配置;
#先檢視master server-id:
命令:show variables like 'server_id';
#檢視master log_bin 是否開起
命令:show variables like 'log_bin';
注意:master 和 slave 的 server-id 不能一樣;
2: dump master 資料庫,最好停止master相關應用 ;
匯出資料命令:mysqldump -uuser -ppassword --single-transaction --master-data --all-databases>/data/master.sql
#引數詳解
--single-transaction
此選項會將隔離級別設定為:REPEATABLE READ。並且隨後再執行一條START TRANSACTION語句,
讓整個資料在dump過程中保證資料的一致性,這個選項對InnoDB的資料表很有用,且不會鎖表。但是這個不能保證MyISAM表和MEMORY表的資料一致性
--master-data
此選項引數的值為1的時候,mysqldump出來的檔案就會包括CHANGE MASTER TO這個語句,
CHANGE MASTER TO後面緊接著就是file和position的記錄,
在slave上匯入資料時就會執行這個語句,salve就會根據指定這個檔案位置從master端複製binlog。預設值是1
--all--database
匯出所有資料庫
3: 配置mysql slave;
#slave基本配置 my.cnf
server-id = 2
relay-log = mysql-relay-bin
log-bin=mysql-bin
expire_logs_days=7
slave-skip-errors = 1062
4: 啟動 mysql slave
5: 匯入 master 資料到 slave;
命令: mysql -u資料庫使用者 -p資料庫密碼 --default-character-set=utf8</data/master.sql
docker命令:docker exec -i mysql-container mysql -uuser -ppassword --default-character-set=utf8 < /data/master.sql
6:在master 建立slave 同步使用者密碼並賦予許可權;
命令:grant all privileges on *.* to 資料庫使用者@'host' identified by '資料庫密碼';
flush privileges;
7: 在slave mysql執行sql:
命令:CHANGE MASTER TO MASTER_HOST = 'master資料庫地址', master_port=master埠, MASTER_USER = '資料庫使用者', MASTER_PASSWORD = '資料庫密碼',MASTER_LOG_FILE='bin-log_name', MASTER_LOG_POS=;
8: 啟動slave 同步;
命令:start slave;
9: 檢查狀態slave 狀態:
命令:show slave status\G