介绍
本文通过Docker搭建MySQL的主从复制 防止硬件原因的数据丢失提升数据库可靠性,为读写分离打下基础。
准备工作
Docker 1.13 、MySQL 5.6镜像以及Docker-compose
配置好docker mysql容器分别部署到Master、Slave服务器中
通过 setenforce 0防止docker中权限不足
Master配置
将docker-compose 的 container_name设置为mysql.Master 保存并退出(给容器起个名字)
docker ps 查看容器ID
通过docker exec -it 容器ID /bin/bash 进入容器
需要配置/etc/mysql/my.cnf
[mysqld]
## 同一局域网内注意ID要唯一
server-id=1
## 开启二进制日志功能log-bin,后面的可以随便取(必要)
log-bin=mysql-bin
## LINUX版本的MYSQL,设置为Mysql大小写不敏感,防止发生表找不到
lower_case_table_names = 1
注意:如果不能进行编辑可以使用apt-get install vim -y 进行vim的安装 安装失败可以使用apt-get update更新后再安装vim
my.cnf配置完毕后使用 service mysql restart 重启MySQL 这时会退出容器
重新进入容器后登陆MySQL
创建Slave中用来读取二进制日志的用户
CREATE USER 'Slave账号'@'%' IDENTIFIED BY 'Slave密码';
给Slave账号权限REPLICATION SLAVE用来进行复制,REPLICATION CLIENT用来查看复制状态
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'Slave账号'@'%';
Slave配置
像Master一样需要配置my.cnf
[mysqld]
## 同一局域网内注意ID要唯一
server-id=2
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## LINUX版本的MYSQL,设置为Mysql大小写不敏感,防止发生表找不到
lower_case_table_names = 1
保存并重启MySQL 进入Docker容器登录MySQL
进行主从同步
在Master上使用show master status;查看File日志记录的文件和Position行数;在后面的操作完成之前不要在Master上进行任何操作,否则会使行数发生变化
在Slave上使用change master to master_host='MasterIP', master_user='Slave账号', master_password='Slave密码', master_port=mysql端口号, master_log_file='MasterFile文件名', master_log_pos= Position行数, master_connect_retry=连接超时重试时间;
注:MasterIP可以通过在Docker容器外使用docker inspect 容器名称|容器ID 里面的NetworkSettings下的IPAddress查看
然后使用show slave status \G;查看主从同步状态
正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程
使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;
SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启
注:如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,但是由于网络不通,密码不对或pos不对造成的,我们可以根据 Last_IO_Error提示予以排除
连接数据库出现Access denied for user 'root'@'localhost' 请参照:http://www.cnblogs.com/wonder315/archive/2011/11/02/2233010.html