Docker 搭建Mysql 主从复制

介绍

本文通过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

你可能感兴趣的:(Docker 搭建Mysql 主从复制)