docker搭建MySQL的主从复制
用Docker搭建Mysql的主从复制
创建主容器
docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-maste mysql:
在宿主机/mysql/conf中创建mysql配置文件
touch /mysql/conf/my.cnf
vim /mysql/conf/my.cnf
#写入以下内容↓↓↓
[mysqld]
#设置 server_id
server_id=101
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=mall-mysql-bin
#设置日志使用内存大小
binlog_cache_size=1M
# 设置使用的日志格式( mixed,statement,row)
# statement:以SQL语句的形式记录更改操作。
# row:以行级别的方式记录更改操作,即记录每个被修改的行的具体内容。
# mixed:将statement和row两种方式结合使用,在某些情况下使用statement,在其他情况下使用row。
binlog_format=mixed
# 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断## 如 :1062>错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
进入容器内部,更新数据库结构
mysql_upgrade -uroot -p
#更新完数据库结构后退出重新登录数据库
quit
mysql -uroot -p
在主数据库中创建同步用户,并赋予对应权限
-- 创建用户
create user 'slave'@'%' identified by '123456';
-- 授予权限
-- REPLICATION SLAVE:赋予用户复制从属的权限;
-- REPLICATION CLIENT:赋予用户复制客户端的权限,允许其执行与复制相关的操作,如查看和管理复制状态等。
-- *.*:表示授权对所有数据库的所有表进行操作。
grant replication slave,replication client on *.* to 'slave'@'%';
创建从数据库容器
docker run -d -p 3308:3306 --privileged=true -v /mysql/mysql-slave/log:/var/log/mysql -v /mysql/mysql-slave/data/:/var/lib/mysql -v /mysql/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql-slave mysql:5.7
在宿主机/mysql/mysql-slave/conf中创建mysql配置文件
touch /mysql/conf/my.cnf
vim /mysql/conf/my.cnf
#写入以下内容↓↓↓
[mysqld]
server_id=102
binlog-ignore-db=mysql
log-bin=mall-mysql-slave1-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
# relay_log配置中继日志
relay_log=mall-mysql-relay-bin
#slave设置为只读
read_only=1
从数据库中开启同步
-- 命令参数说明:
/*
mater_host:主数据库IP;
master_port:主数据库端口;
master_user:在主数据库中创建的用于同步数据的用户账号;
master_password:在主数据库中创建的用于同步数据的用户密码;master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据库的状态,获取Position参数;
master_connect_retry:指定连接失败重试的时间间隔,单位为秒;
*/
-- 指定主数据库
change master to master_host='10.10.10.12',master_user='slave',master_password='123456',master_port=3306,master_log_file='mall-mysql-bin.000001',master_log_pos=617,master_connect_retry=30;
-- 开启主从同步
start slave;
-- 查看从数据库是否开启同步
show slave status \G;
出现如下图所示的两个Yes,则表示开启成功。
在主数据库中创建表测试同步是否生效
从数据库:
在主数据库中创建新的数据库:
create database master;
创建新表并插入一条数据
--创建表
create table text (id,int name varhcar(100));
--插入数据
insert into text values(1,'xiaoming');
在从数据库中查看数据是否已同步:
【往期推荐】