docker之MySQL主從複製

##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.cnfdocker

[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;
相關文章
相關標籤/搜索