基於Docker實現MySQL的主從複製和SpringBoot2+MyBatis的動態切換資料來源的讀寫分離

小飛鶴發表於2018-05-31

1)從Docker官方下拉MySQL的image 

docker search mysql

docker pull mysql   

2)設定目錄   ---  將MySQL資料儲存到當前主機上
建立MySQL資料儲存目錄
mkdir -pv /Users/pintec/jay/db_test

 建立主伺服器的配置目錄
 mkdir -pv /Users/pintec/jay/db_test/mysql/101

 建立從伺服器的配置目錄
 mkdir -pv /Users/pintec/jay/db_test/mysql/102

3)設定主從伺服器配置 

vi /Users/pintec/jay/db_test/mysql/101/101.cnf

[mysqld]
log-bin=mysql-bin  //[必須]啟用二進位制日誌
server-id=101  //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
  • 1
  • 2
  • 3

vi /Users/pintec/jay/db_test/mysql/101/102.cnf

[mysqld]
log-bin=mysql-bin
server-id=102


4)  啟動MySQL容器

//建立2個MySQL容器
 docker create --name mysqlsrv101 -v /Users/pintec/jay/db_test/mysql/101:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql

 docker create --name mysqlsrv102 -v /Users/pintec/jay/db_test/mysql/102:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql


 或指定資料儲存到本地
 docker create --name mysqlsrv101 -v /Users/pintec/jay/db_test/mysql101:/var/lib/mysql -v /Users/pintec/jay/db_test/mysql/101:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql

 docker create --name mysqlsrv102 -v /Users/pintec/jay/db_test/mysql102:/var/lib/mysql -v /Users/pintec/jay/db_test/mysql/102:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql

#根據容器名,啟動容器
 docker start mysqlsrv101

 docker start mysqlsrv102


5)配置MySQL主從伺服器

     登入主伺服器 3307,查詢master狀態,注意查出的Position(從伺服器master_log_pos要用),授權使用者:backup,密碼:root

 show master status;
 SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
 GRANT REPLICATION SLAVE ON.* to 'backup'@'%' identified by 'root';





登入從伺服器的3308,設定與主伺服器相關的配置引數

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
change master to master_host='192.168.208.84', master_port=3307,master_user='backup',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=154;


注意:
      master_host為docker的地址不能寫127.0.0.1
      master_user是在主庫建立的使用者
      master_log_pos是主庫show master status;查詢出的Position

   Waiting for master to send event 就是成功了
   Connecting to master 多半是連線不通

   之後主庫的修改都能同步到從庫了


6)主伺服器建立資料庫,並建立資料

主伺服器建立資料庫jay_db1
  執行SQL:
      DROP TABLE IF EXISTS `person`;
 CREATE TABLE `person` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `address` varchar(255) COLLATE utf8_bin DEFAULT NULL,
   `age` int(11) DEFAULT NULL,
   `name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

 從伺服器會自動複製db和內容









相關文章