.说明
此操作文档,如果在master机器已开启bin-log及设定好server-id的情况下,可以不锁表,不停机的实现master-slave同步。这一同步可以将master上已有数据同步到slave中,且如果slave出错,或是新增slave,同样可以参照此文档操作。
此文档基于master版本5.7.24,解压安装,非root帐号运行启停。Slave使用容器运行,镜像地址:harbor.xxxx.com.cn/3rd_part/MysqL:5.7.24,运行帐号为非root帐号。
.MysqL Master服务器
一,登陆MysqL master服务器
ssh dbqry@master
二,查看my.cnf文件配置
[client] port=3306
[MysqLd] port=3306 user=MysqL datadir=/MysqL/data log_error=/MysqL/error.log server-id=100 max_allowed_packet = 500M max_connections=10000 log-bin=MysqL-bin binlog-format=mixed character-set-server=utf8 sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
确认此配置已经过重启。(如果不重启,后面的操作都不能继续)
三,使用root登陆MysqL,确认已为django用户赋权。
GRANT ALL ON TestDB.* TO ' rep-user '@'%';
flush privileges;
【以防意外,先备份!!!】
reset master
五,备份TestDB数据库
MysqLdump -u root -p TestDB --single-transaction --master-data=2 --default-character-set utf8 --no-autocommit>TestDB.sql
增加--single-transaction --master-data=2是为了能准备记录log-bin开始的文件号和偏移量。
.MysqL slave服务器
一,前置准备
删除已有的MysqL服务,确认slave机器上没有任何MysqL服务和数据。
二,新增docker运行所需文件夹
mkdir /docker/MysqL-docker
mkdir /docker/MysqL-docker/data
mkdir /docker/MysqL-docker/conf
mkdir /docker/MysqL-docker/log
mkdir /docker/MysqL-docker/back
用于存储MysqL的数据,配置,日志及备份
三,新增slave的配置文件
/docker/MysqL-docker/conf/MysqL_prism.cnf
[client] port = 3306 #socket=/docker/MysqL/MysqL.sock
[MysqLd] port=3306 default-time_zone = '+8:00' #user = MysqL #basedir = /docker/MysqL/MysqL #datadir = /docker/MysqL/data #pid-file = /docker/MysqL/MysqL.pid #socket = /docker/MysqL/MysqL.sock log_error = /var/log/MysqL/error.log server-id = 999 relay-log = MysqL-relay # replicate-do-db = TestDB character-set-server = utf8 max_allowed_packet = 500M max_connections = 10000 sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
server-id 999大于master上的server-id(100)。
四,新增slave上的docker启动脚本
/docker/MysqL-docker/start_MysqL.sh
#!/bin/sh
MysqL_dir=/docker/MysqL-docker docker run -p 3306:3306 -v "${MysqL_dir}/data":/var/lib/MysqL -v "${MysqL_dir}/conf":/etc/MysqL/conf.d -v "${MysqL_dir}/back":/back -v "${MysqL_dir}/log":/var/log/MysqL --user 1234:1234 --name MysqL-slave -e MysqL_ROOT_PASSWORD=xxxxxx -d harbor.xxxx.com.cn/3rd_part/MysqL:5.7.24 |
其中--user 1234:1234对应于宿主机的非root用户和组启动MysqL。
之后,登陆进docker,更改MysqL的root密码。
docker exec -it MysqL-slave MysqL -u root –p
CREATE USER 'rep-user'@'%' IDENTIFIED BY 'xxxxxxx';
create database TestDB default character set utf8 collate utf8_general_ci;
GRANT ALL ON TestDB.* TO 'rep-user'@'%';
flush privileges;
六,导入备份的数据库数据
MysqL -udjango -p TestDB < /back/ TestDB.sql
七,获取TestDB.sql文件里的bin-log编号和位移
head -n 30 TestDB.sql
输出类似如下:
-- CHANGE MASTER TO MASTER_LOG_FILE='MysqL-bin.000003', MASTER_LOG_POS=154;
八,写入需要同步的master地址等信息
change master to
master_host='master_ip',
master_user='rep-user',
master_password='xxxxxx',
master_log_file='MysqL-bin.000003',
master_log_pos=154;
上面的master_log_file和master_log_pos对应于前一步骤的数据。
九,启动主从同步
start slave
十,查看同步状态及排错,验证
1,查看同步状态命令
show slave status\G,
2,排错
查看日志及stop slave或reset slave
3,验证
create table demo( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL, PRIMARY KEY ( id ) ); insert into demo (name) values ('cheng'); |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。