docker技术已经很成熟了,近期有系统学习docker的计划,现在学习的docker知识比较混乱,都是想到什么去百度搜一下并没有系统的学习过,前几天看了个mysql主从搭建的视频,本人用docker做了下mysql的主从复制。故在此记录下
注:MASTER 代表主数据库
SLAVE 代表从数据库
一、准备:一台linux服务器(centos,debain都可以,个人推荐deabin)
二、安装docker,这里不详细说了
三、拉取mysql镜像,这里用的版本为mysql5.7
使用镜像加速:docker pull registry.docker-cn.com/library/mysql:5.7
四、创建文件夹
(1)、MASTER数据库使用:mkdir -p /usr/local/docker/mysql-master/conf /usr/local/docker/mysql-master/data
SLAVE数据库使用:mkdir -p /usr/local/docker/mysql-slave-01/conf /usr/local/docker/mysql-slave-01/data
五、新建mysql的配置文件my.cnf
MASTER: vim /usr/local/docker/mysql-master/conf/my.cnf
写入配置:
[mysqld]
server-id=1 ## 同一局域网内注意要唯一
log-bin=master-bin ## 开启二进制日志功能,可以随便取(关键)
log-bin-index=master-bin.index ##同上
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
SLAVE: vim /usr/local/docker/mysql-slave-01/conf/my.cnf
写入配置:
[mysqld]
server-id=2 ## 同一局域网内注意要唯一
log-bin=slave01-bin ## 开启二进制日志功能,以备SLAVE作为其它SLAVE的Master时使用
log-bin-index=slave01-bin.index ## 同上
relay-log=slave-relay-bin ## SLAVE配置
relay-log-index=relay-bin.index
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
六、启动数据库,挂载外部数据
MASTER:
docker run -d --privileged=true --name mysql5.7-master -p 23306:3306 -v /usr/local/docker/mysql-master/data:/var/lib/mysql -v /usr/local/docker/mysql-master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 registry.docker-cn.com/library/mysql:5.7
SLAVE:
docker run -d --privileged=true --name mysql5.7-slave-01 -p 23307:3306 -v /usr/local/docker/mysql-slave-01/data:/var/lib/mysql -v /usr/local/docker/mysql-slave-01/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 registry.docker-cn.com/library/mysql:5.7
七、配置MASTER
可以进入docker内部登录上msql执行,也可用工具,本人使用navicate
MASTER需要新建用户,让SLAVE使用
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'slave'@'%';
其中的%可以换成从数据库的ip地址
执行查看MASTER状态的sql:SHOW MASTER STATUS;
记下:File:master-bin.000003和Position:609
至此,MASTER完毕
八、配置SLAVE
change master to master_host='192.168.56.101',master_port=23306, master_user='slave', master_password='123456',master_log_file='master-bin.000003', master_log_pos= 609, master_connect_retry=30;
命令说明:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
执行:start slave;开启主从同步
执行sql:show slave status;查看SLAVE状态
SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。
如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,我们可以根据 Last_IO_Error查看错误原因。
现在在主数据库添加点东西看下从库是否可以正常复制了。
完毕,希望能帮到大家!!!
网友评论