# 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","&"] |
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <table name="user" primaryKey="id" dataNode="dn1" rule="auto-sharding-long" /> </schema> <dataNode name="dn1" dataHost="host1" database="test" /> <dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="host1" url="127.0.0.1:33075" user="root" password="root"></writeHost> <writeHost host="host2" url="127.0.0.1:33076" user="root" password="root"></writeHost> </dataHost> </mycat:schema> |
创建镜像 注意要在相应目录下 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","&"] |
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <table name="user" primaryKey="id" dataNode="dn1" rule="auto-sharding-long" /> </schema> <dataNode name="dn1" dataHost="host1" database="test" /> <dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="host1" url="127.0.0.1:33075" user="root" password="root"></writeHost> <writeHost host="host2" url="127.0.0.1:33076" user="root" password="root"></writeHost> </dataHost> </mycat:schema> |
创建镜像 注意要在相应目录下 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的管理 |