1:检查mysql master 配置;
#先查看master server-id:
命令:show variables like 'server_id';
#查看master log_bin 是否开起
命令:show variables like 'log_bin';
如果 没开启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=;
注: MASTER_LOG_FILE 和 MASTER_LOG_POS 的值从导出的master.sql里面找
8: 启动slave 同步;
命令:start slave;
9: 检查状态slave 状态:
命令:show slave status\G