通常狀況下對數據庫的操做都是讀多寫少,也就說對數據庫讀取數據的壓力比較大,咱們採用數據庫集羣的方案:設置一個主庫,負責寫數據,其它都是從庫,負責讀數據。mysql
目標:sql
master:主
slave:從docker
主DB server和從DB server數據庫的版本一致
主DB server和從DB server數據庫數據一致
主DB server開啓二進制日誌,主DB server和從DB server的server_id都必須惟一shell
#開啓主從複製,主庫的配置
log-bin = mysql-bin
#指定主庫serverid
server-id=1
#指定同步的數據庫,若是不指定則同步所有數據庫
binlog-do-db=my_test
複製代碼
#執行SQL語句查詢狀態
SHOW MASTER STATUS
複製代碼
#受權用戶slave01使用123456密碼登陸mysql
grant replication slave on *.* to 'slave01'@'127.0.0.1' identified by '123456';
#刷新配置
flush privileges;
複製代碼
#指定serverid,只要不重複便可,從庫也只有這一個配置,其餘都在SQL語句中操做
server-id=2
複製代碼
#如下執行SQL:
CHANGE MASTER TO
master_host='127.0.0.1',
master_user='slave01',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000006',
master_log_pos=1120;
#啓動slave同步
START SLAVE;
#查看同步狀態
SHOW SLAVE STATUS;
複製代碼
#建立目錄
mkdir /data/mysql/master01
cd /data/mysql/master01
mkdir conf data
chmod 777 * -R
#建立配置文件
cd /data/mysql/master01/conf
vim my.cnf
#輸入以下內容
[mysqld]
log-bin=mysql-bin #開啓二進制日誌
server-id=1 #服務id,不可重複
複製代碼
#建立容器
docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v
/data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root
percona:5.7.23
#啓動
docker start percona-master01 && docker logs -f percona-master01
複製代碼
#建立同步帳戶以及受權
create user 'name'@'%' identified by 'name';
grant replication slave on *.* to 'itcast'@'%';
flush privileges;
#出現 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and錯誤解
決方案,在my.cnf配置文件中設置
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
#查看master狀態
show master status;
#查看二進制日誌相關的配置項
show global variables like 'binlog%';
#查看server相關的配置項
show global variables like 'server%';
複製代碼
#建立目錄
mkdir /data/mysql/slave01
cd /data/mysql/slave01
mkdir conf data
chmod 777 * -R
#建立配置文件
cd /data/mysql/slave01/conf
vim my.cnf
#輸入以下內容
[mysqld]
server-id=2 #服務id,不可重複
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
複製代碼
#建立容器
docker create --name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v
/data/mysql/slave01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root
percona:5.7.23
#啓動
docker start percona-slave01 && docker logs -f percona-slave01
#設置master相關信息
CHANGE MASTER TO
master_host='192.168.1.18',
master_user='name',
master_password='password',
master_port=3306,
master_log_file='mysql-bin.000002',
master_log_pos=648;
#啓動同步
start slave;
#查看master狀態
show slave status;
複製代碼
show global variable like 'binlog%';
複製代碼
binlog_format 屬性值默認爲 ROW數據庫
修改配置:vim
#修改主庫的配置
binlog_format=MIXED
#重啓
docker restart percona-master01 && docker logs -f percona-master01
#查看二進制日誌相關的配置項
show global variables like 'binlog%';
複製代碼
此時能夠測試同步功能bash