基于MyCat的MySql自动故障转移



# MySql双主复制
## 创建主a,b镜像
    建立文件夹,创建相关文件,这里只给a的过程


mkdir mysql-mm-a
touch Dockerfile
touch mysql.cnf
mkdir /var/docker/mysql/data-mm-a


文件内写入相应内容


FROM mysql:latest
COPY mysql.cnf /etc/mysql/conf.d/mysql.cnf


[mysqld]
log-bin=mysql-bin   #[必须]启用二进制日志
server-id=1           #设置为主机ip,主机b此处设为2
relay-log=slave-relay-bin


创建镜像 注意要在相应目录下 mysql-mm-a,启动镜像


docker build -t mysql-mm-a .
docker run --privileged=true -p 33075:3306 --name mysql-mm-a -v /var/docker/mysql/data-mm-a/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql-mm-a
# 注意启动b的时候要在不同端口及文件夹
docker run --privileged=true -p 33076:3306 --name mysql-mm-a -v /var/docker/mysql/data-mm-b/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql-mm-b


创建b的镜像与a基本相同,需要注意的地方前面的步骤已经说明,主要是文件夹,命名,端口不一样
 
## 配置两个服务互为主从
    连入mysql-mm-a,并执行相应命令


mysql -h127.0.0.1 -P33075 -uroot -p


输入密码,进入后执行以下命令:


GRANT REPLICATION SLAVE ON *.* TO 'dev'@'%' IDENTIFIED BY 'dev';
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
SHOW MASTER STATUS; --file和position参数要用于从节点配置


连接mysql-mm-b,执行相应命令:


mysql -h127.0.0.1 -P33076 -uroot -p


输入密码,进入后执行以下命令:


change master to
master_host='127.0.0.1',
master_port=33075,
master_user='dev',
master_password='dev',
master_log_file='mysql-bin.000003',
master_log_pos=428;   -- 这两个参数是另一个服务执行 SHOW MASTER STATUS的结果
START SLAVE;


至此便完成了主33075从33076的复制状态,将以上步骤按照33075和33076互换,配置为主33076从33075,这样便互为主从复制了


# 创建MyCat服务
    


mkdir mycat-mm
cd mycat-mm
touch Dockerfile
wget http://dl.mycat.io/1.7-BETA/Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz
mv Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz mycat.tar.gz


将MyCat压缩包解压,将conf文件夹复制到当前目录
文件内写入相应内容


FROM openjdk:8
ADD mycat.tar.gz /usr/local/
COPY conf /usr/local/mycat/conf
VOLUME /usr/local/mycat/conf
ENV MYCAT_HOME=/usr/local/mycat
EXPOSE 8066 9066
CMD ["/usr/local/mycat/bin/mycat", "console","&"]






	
		
	
		select user()
		
		
		
	

  
     
    
  


创建镜像 注意要在相应目录下 mycat-mm,启动镜像


docker build -t mycat-mm .
docker run --name mycat-mm -p 8088:8066 -p 9088:9066 -d mycat-mm


# 测试
尝试连接8088端口的mycat服务,对user表进行插入,分别到33075,33076数据库中查看已有记录;
停止 33075,再执行插入,可以看到插入依然成功,到33076可以看到数据插入该库,mycat以将写入库切换到33076
重新启动33075,查询其中的数据,可以看到,重启后的33075会自动同步33076的数据
再次插入数据,可以看到33075,33076都插入,说明33075恢复后又自动纳入了mycat的管理

# MySql双主复制
## 创建主a,b镜像
    建立文件夹,创建相关文件,这里只给a的过程


mkdir mysql-mm-a
touch Dockerfile
touch mysql.cnf
mkdir /var/docker/mysql/data-mm-a


文件内写入相应内容


FROM mysql:latest
COPY mysql.cnf /etc/mysql/conf.d/mysql.cnf


[mysqld]
log-bin=mysql-bin   #[必须]启用二进制日志
server-id=1           #设置为主机ip,主机b此处设为2
relay-log=slave-relay-bin


创建镜像 注意要在相应目录下 mysql-mm-a,启动镜像


docker build -t mysql-mm-a .
docker run --privileged=true -p 33075:3306 --name mysql-mm-a -v /var/docker/mysql/data-mm-a/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql-mm-a
# 注意启动b的时候要在不同端口及文件夹
docker run --privileged=true -p 33076:3306 --name mysql-mm-a -v /var/docker/mysql/data-mm-b/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql-mm-b


创建b的镜像与a基本相同,需要注意的地方前面的步骤已经说明,主要是文件夹,命名,端口不一样
 
## 配置两个服务互为主从
    连入mysql-mm-a,并执行相应命令


mysql -h127.0.0.1 -P33075 -uroot -p


输入密码,进入后执行以下命令:


GRANT REPLICATION SLAVE ON *.* TO 'dev'@'%' IDENTIFIED BY 'dev';
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
SHOW MASTER STATUS; --file和position参数要用于从节点配置


连接mysql-mm-b,执行相应命令:


mysql -h127.0.0.1 -P33076 -uroot -p


输入密码,进入后执行以下命令:


change master to
master_host='127.0.0.1',
master_port=33075,
master_user='dev',
master_password='dev',
master_log_file='mysql-bin.000003',
master_log_pos=428;   -- 这两个参数是另一个服务执行 SHOW MASTER STATUS的结果
START SLAVE;


至此便完成了主33075从33076的复制状态,将以上步骤按照33075和33076互换,配置为主33076从33075,这样便互为主从复制了


# 创建MyCat服务
    


mkdir mycat-mm
cd mycat-mm
touch Dockerfile
wget http://dl.mycat.io/1.7-BETA/Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz
mv Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz mycat.tar.gz


将MyCat压缩包解压,将conf文件夹复制到当前目录
文件内写入相应内容


FROM openjdk:8
ADD mycat.tar.gz /usr/local/
COPY conf /usr/local/mycat/conf
VOLUME /usr/local/mycat/conf
ENV MYCAT_HOME=/usr/local/mycat
EXPOSE 8066 9066
CMD ["/usr/local/mycat/bin/mycat", "console","&"]






	
		
	
		select user()
		
		
		
	

  
      
     
   


创建镜像 注意要在相应目录下 mycat-mm,启动镜像


docker build -t mycat-mm .
docker run --name mycat-mm -p 8088:8066 -p 9088:9066 -d mycat-mm


# 测试
尝试连接8088端口的mycat服务,对user表进行插入,分别到33075,33076数据库中查看已有记录;
停止 33075,再执行插入,可以看到插入依然成功,到33076可以看到数据插入该库,mycat以将写入库切换到33076
重新启动33075,查询其中的数据,可以看到,重启后的33075会自动同步33076的数据
再次插入数据,可以看到33075,33076都插入,说明33075恢复后又自动纳入了mycat的管理

你可能感兴趣的:(MySQL)