Docker容器mysqldocker

docker mysql 主从配置

2018-05-04  本文已影响75人  39bd3c3d98f1

最近有公司有需求,需要在两台机器上使用docker的方式部署mysql,并部署成主从的方式。记录一下。

参考文章:

一、环境准备

准备两台机器A,B。
两台机器都是centos7,假设A内网是192.168.1.0,B内网是192.168.1.1。

二、准备主从mysql需要的配置文件

mysql_master.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address   = 0.0.0.0
port=3307
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0


## 设置server_id,一般设置为IP,注意要唯一
server_id=100
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
# 如果备份多个数据库,重复设置这个选项即可
binlog-do-db=my_db
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=edu-mysql-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

mysql_slave.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address   = 0.0.0.0
port=3307
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0


## 设置server_id,一般设置为IP,注意要唯一
server_id=101
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
# 如果备份多个数据库,重复设置这个选项即可
binlog-do-db=my_db
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## 防止改变数据(除了特殊的线程)
read_only=1

三、配置主mysql

1、安装mysql

拷贝mysql_master.cnf到机器A的/mnt/mysql/mysql_master.cnf,执行下列命令:

sudo docker run --net host  --name mymysql -v /mnt/mysql:/var/lib/mysql -v /mnt/mysql/mysql_master.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=password   --restart always -d mysql

2、配置

# 连接mysql
docker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3307 -uroot -ppassword'
# 执行下列sql
create database my_db;
CREATE USER 'slave'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 
show master status;  

执行show master status; 以后要记住File、Position两个参数,在配置从mysql的时候会用到。


mysql_slave.png

四、配置从mysql

1、安装mysql

拷贝mysql_slave.cnf到机器B的/mnt/mysql/mysql_slave.cnf,执行下列命令:

sudo docker run --net host  --name mymysql -v /mnt/mysql:/var/lib/mysql -v /mnt/mysql/mysql_slave.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=password   --restart always -d mysql

2、配置

# 连接mysql
docker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3307 -uroot -ppassword'
# 执行下列sql
create database my_db;
# master_log_file 对应 File
# master_log_pos 对应 Position
change master to master_host='192.168.1.0', master_user='slave', master_password='password', master_port=3307, master_log_file='edu-mysql-bin.000004', master_log_pos=2611, master_connect_retry=10;  
show slave status;  
start slave;  
show slave status;  

五、测试

# 在主mysql创建表并插入数据
create table hi_tb(id int(3),name char(10));
insert into hi_tb values(001,'bobu');
# 在从数据库检查可以看到已经有对应的数据
show tables;
select * from hi_tb;
上一篇 下一篇

猜你喜欢

热点阅读