##MySQL主從複製 ###主服務器mysql
配置文件目錄 mkdir /var/lib/mysql/master/conf.d 數據存儲目錄 mkdir var/lib/mysql/master/datasql
配置my.cnf文件 # cd /var/lib/mysql/master/conf.d
# vim my.cnf
docker
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL symbolic-links=0 log-bin = mysql-bin server-id = 1數據庫
啓動master容器:vim
docker run -it -p 3306:3306 --name master -v /var/lib/mysql/master/conf.d:/etc/mysql/conf.d -v /var/lib/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
重啓master容器bash
docker stop master slave docker start master slave
進入master容器,設置mysql主從複製用戶reader服務器
docker exec -it master /bin/bash root@1e8e984a9a30:/# mysql -uroot –p123456(前面設置的密碼MYSQL_ROOT_PASSWORD=123456)
<b>MySQL舊版賦權方法:</b>socket
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; GRANT REPLICATION SLAVE ON . to 'reader'@'%' identified by 'readerpwd';ide
<b><font color=red>注意:由於新版的的mysql版本已經將建立帳戶和賦予權限的方式分開了,因此若是是最早版本的mysql鏡像按下面的方法建立用戶、賦權。</font></b>測試
建立帳戶:create user '用戶名'@'訪問主機' identified by '密碼'; 賦予權限:grant 權限列表 on 數據庫 to '用戶名'@'訪問主機' ;(修改權限時在後面加with grant option) mysql> create user 'reader'@'%' identified by 'readerpwd'; Query OK, 0 rows affected (4.57 sec) mysql> GRANT REPLICATION SLAVE ON . to 'reader'@'%'; Query OK, 0 rows affected (1.13 sec) FLUSH PRIVILEGES;
查看二進制日誌是否開啓: mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.99 sec) mysql> show master status;
###從服務器
配置文件目錄 mkdir /var/lib/mysql/slave/conf.d 數據存儲目錄 mkdir var/lib/mysql/slave/data
# cd /var/lib/mysql/slave/conf.d
# vim my.cnf
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL symbolic-links=0 server-id = 2 relay_log = mysql-relay-bin #打開Mysql日誌,日誌格式爲二進制 read_only = 1 #設置只讀權限 log_bin = mysql-bin #開啓從服務器二進制日誌 log_slave_updates = 1 #使得更新的數據寫進二進制日誌中
啓動slave容器:
docker run -it -p 3307:3306 --name slave -v /var/lib/mysql/slave/conf.d:/etc/mysql/conf.d -v /var/lib/mysql/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
進入slave容器,啓動從服務器複製線程,讓slave鏈接master,並開始重作master二進制日誌中的事件
docker exec -it slave /bin/bash root@6df92c02669a:/# mysql -uroot -p123456 mysql>change master to master_host='192.168.1.24',master_port=3306,master_user='reader',master_password='readerpwd',master_log_file='mysql-bin.000001',master_log_pos=155; mysql> show slave status\G;
###測試:
主服務器:
create database slavetest;
從服務器:觀察是否建立了slavetest數據庫,若是看到了,就說明實驗成功了
show databases;