(1)创建主容器
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 mysql:
(2)在宿主机/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)
binlog_format=mixed
## 二进制日志过期清理时间.默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断## 如 :1062>错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
(3)进入容器内部,更新数据库结构
mysql_upgrade -uroot -p
#更新完数据库结构后退出重新登录数据库
quit
mysql -uroot -p
(4)为数据库创建同步用户
-- 创建用户
create user 'slave'@'%' identified by '123456';
-- 授予权限
grant replication slave,replication client on *.* to 'slave'@'%';
(5)创建从数据库容器
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
(6)在宿主机/mysql/mysql-slave/conf中创建mysql配置文件
touch /mysql/conf/my.cnf
vim /mysql/conf/my.cnf
#写入以下内容↓↓↓
[mysqld]
## 设置 server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小 (事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式 (mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断## 如 : 1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志log_slave_updates=1## slave设置为只读 (具有super权限的用户除外)
read_only=1
(7)在从数据库中配置主从复制
-- 命令参数说明:
/*
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;
(8)出现如下图所示的两个Yes,则表示开启成功。
(9)在主数据库中创建表测试同步是否生效
从数据库当前数据库数量:
(10)在主数据库中创建新的数据库:
create database master;
(11)创建新表并插入一条数据
--创建表
create table text (id,int name varhcar(100));
--插入数据
insert into text values(1,'xiaoming');
(12)在从数据库中查看数据,可以发现数据已同步:
标签:主从复制,slave,log,##,数据库,master,mysql,docker From: https://blog.51cto.com/qclr/7408335