基於Docker實現MySQL的主從複製和SpringBoot2+MyBatis的動態切換資料來源的讀寫分離
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和內容
相關文章
- [Mysql]主從複製和讀寫分離MySql
- springboot多資料來源配合docker部署mysql主從實現讀寫分離Spring BootDockerMySql
- MySQL主從複製讀寫分離MySql
- Mysql-主從複製與讀寫分離MySql
- Spring-Boot 多資料來源配置+動態資料來源切換+多資料來源事物配置實現主從資料庫儲存分離Springboot資料庫
- mysql資料庫的主從複製和主主複製實踐MySql資料庫
- 搭建Redis簡易叢集實現主從複製和讀寫分離Redis
- 基於 Docker 的 MySQL 主從複製搭建(真正弄懂)DockerMySql
- 基於AOP的動態資料來源切換(附原始碼)原始碼
- Mycat讀寫分離、主從切換、分庫分表的操作記錄
- 搭建MySQL主從實現Django讀寫分離MySqlDjango
- 基於MySql主從分離的程式碼層實現MySql
- docker實現mysql主從複製DockerMySql
- MySQL怎麼實現主從同步和Django實現MySQL讀寫分離MySql主從同步Django
- Mariadb之主從複製的讀寫分離
- MHA實現mysql主從資料庫手動切換的方法MySql資料庫
- Linux下MySQL主從複製(GTID)+讀寫分離(ProxySQL)-實施筆記LinuxMySql筆記
- Redis哨兵模式(sentinel)學習總結及部署記錄(主從複製、讀寫分離、主從切換)Redis模式
- 資料庫讀寫分離,主從同步實現方法資料庫主從同步
- Linux實現MySql資料庫的主從複製(一主一從)LinuxMySql資料庫
- 基於 Docker 的 MySQL 主從複製搭建及原理(真正弄懂)DockerMySql
- Mycat中介軟體實現Mysql主從讀寫分離MySql
- MySQL 5.7基於GTID的主從複製MySql
- mysql 基於日誌的主從複製MySql
- mysql資料庫實現主從複製MySql資料庫
- docker+atlas+mysql實現讀寫分離DockerMySql
- 基於Sharding-Jdbc 實現的讀寫分離實現JDBC
- springboot+mybatis+druid實現mysql主從讀寫分離(五)Spring BootMyBatisUIMySql
- MYSQL 主從 + ATLAS 讀寫分離 搭建MySql
- 配置\清除 MySQL 主從 讀寫分離MySql
- 搭建基於springmvc,ibatis的工程實現讀寫分離,配置分離SpringMVCBAT
- Kubernetes 中實現 MySQL 的讀寫分離MySql
- 使用Spring實現訪問主從資料庫的讀寫和只讀事務/事物的分離路由 -Vlad MihalceaSpring資料庫路由
- Spring Boot + Mybatis 多資料來源配置實現讀寫分離Spring BootMyBatis
- Mysql 基於GTID主從複製MySql
- Mycat2+Mysql一主一從實現讀寫分離配置MySql
- MySQL主從分離實現MySql
- AbstractRoutingDataSource 實現動態資料來源切換原理簡單分析