# 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的管理 |