mysql主从复制docker版

[toc]

新建主服务器容器实例

docker run -p 3307:3306 --name mysql-master \
-v /mysql/mydata/mysql-master/log:/var/log/mysql \
-v /mysql/mydata/mysql-master/data:/var/lib/mysql \
-v /mysql/mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

进入/mydata/mysql-master/conf目录下新建my.cnf

vim my.conf

配置如下

[mysqld]
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/mysqldb
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 64M
max_heap_table_size = 64M
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

修改后重启实例

docker restart mysql-master

创建数据同步用户

create user 'slave'@'%'identified by '123456';
grant replication slave,replication client on *.* to 'slave'@'%';

创建用户slava

设置权限

新建从服务器3308

docker run -p 3308:3306 --name mysql-slavea \
-v /mysql/mydata/mysql-slave/log:/var/log/mysql \
-v /mysql/mydata/mysql-slave/data:/var/lib/mysql \
-v /mysql/mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

设置配置文件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
relat_log=mall-mysql-relay-bin
log_slave_updates=1
read_only=1 
#设置为只读

重启实例

docker restart mysql-slavea