生產中經常需要主從數據庫,主數據庫用於寫操作,從數據庫用於讀操作,讀寫分立分擔數據庫壓力。同步原理主要用到log-bin配置,主數據庫記錄操作保存爲二進制文件,從數據庫實時讀取並更新。
基於Docker配置註冊數據庫更加方便,可以用於開發測試用,生產中也可以。
安裝Docker
官網地址:https://www.docker.com/
我這邊是mac,下載安裝包就可以了,當然Windows也一樣。
Linux服務器可以通過命令安裝,官網上看一下就知道了。
用docker-compose對服務進行編排,安裝後自帶docker-compose命令。
主數據庫(Master)配置
目錄結構
用docker-compose配置運行容器,可以將master和salve放在一個docker-compose.yml文件配置的,但我這裏將master和slave分開了,方便理解思路。
docker-compose.yml
version: '3.1'
services:
mysql-1-master:
image: 'mysql:5.7'
container_name: mysql-1-master
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3312:3306
volumes:
- ./data:/var/lib/mysql
- ./conf/my.cnf:/etc/my.cnf
- 數據存放位置/var/lib/mysql隱射到當前目錄data下,可以避免誤操作導致數據丟失。
- 配置文件/etc/my.cnf隱射到conf/my.cnf
my.cnf
server-id=1
log-bin=mysql-bin
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
character_set_server=utf8mb4
說明:
- server-id 主從數據庫的server-id不能一樣
- log-bin=mysql-bin 開啓二進制記錄
- binlog-ignore-db 配置不需要同步的數據庫
- character_set_server=utf8mb4 將編碼設置爲utf8mb4,可以存表情等特殊字符
運行Master
docker-compose up -d
說明
- 沒有報錯說明啓動成功,可以通過docker ps命令查看狀態
- 如果出錯可能是數據庫端口重複,或者service name已經存在(重新命名就行)
查看容器id
docker ps
這裏的583a00264b73就是下一步進入容器需要的(docker基本命令,不知道的可以去官網學一下)
進入容器並進入mysql
docker exec -it 583a00264b73 /bin/bash
mysql -uroot -p
查看master 狀態
show master status
mysql-bin 和Position記一下,後面slave需要用
從數據庫(Slave)配置
目錄結構和master一樣
my.cnf
[mysqld]
server-id=2
read_only=1
- server-id=2 要和master不一樣
- read_only=1只讀模式
docker-compose.yml
version: '3.1'
services:
mysql-1-slave:
image: 'mysql:5.7'
container_name: mysql-1-slave
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3313:3306
volumes:
- ./data:/var/lib/mysql
- ./conf/my.cnf:/etc/my.cnf
- 注意端口號和服務名要更改一下
和master一樣,進入容器的mysql
配置從數據需要備份的主數據庫的信息
CHANGE MASTER TO MASTER_HOST='192.168.31.163',MASTER_PORT=3312,MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154
- 注意ip地址和端口號,ip不能是127.0.0.1,是本機的ip地址
開啓slave
start slave
查看是否成功
show slave status\G
出現兩個yes,說明同步成功啦
用Navicat等數據庫工具去測試一下,master更新數據立馬被同步到slave了。
ps:
centos中配置定時導出sql備份,詳看
https://blog.csdn.net/qq_28883885/article/details/102953140