1. 程式人生 > 其它 >Mysql主從搭建

Mysql主從搭建

# 1 主從同步的流程或原理
    1)master會將變動記錄到二進位制日誌裡面;
    2)master有一個I/O執行緒將二進位制日誌傳送到slave;
    3) slave有一個I/O執行緒把master傳送的二進位制寫入到relay日誌裡面;
    4)slave有一個SQL執行緒,按照relay日誌處理slave的資料;
# 2 



# 3 修改配置檔案
####主庫的配置檔案,server-id和開啟binlog日誌
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv
=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000 server-id=100 log-bin=mysql-bin [client] default-character-set=utf8 [mysql] default-character-set=utf8 #############從庫的配置 ####主庫的配置檔案,server-id和開啟binlog日誌
[mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000 server-id=101 log-bin=mysql-slave-bin relay_log
=edu-mysql-relay-bin [client] default-character-set=utf8 [mysql] default-character-set=utf8 # 4 拉起兩個mysql容器 #啟動主庫容器(掛載外部目錄,埠對映成33307,密碼設定為123456) docker run -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 33307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 #啟動從庫容器(掛載外部目錄,埠對映成33306,密碼設定為123456) docker run -di -v /home/mysql2/data/:/var/lib/mysql -v /home/mysql2/conf.d:/etc/mysql/conf.d -v /home/mysql2/my.cnf:/etc/mysql/my.cnf -p 33306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 #5 建立test使用者,並授權 #在主庫建立使用者並授權 ##建立test使用者 create user 'test'@'%' identified by '123'; ##授權使用者 grant all privileges on *.* to 'test'@'%' ; ###重新整理許可權 flush privileges; #檢視主伺服器狀態(顯示如下圖) show master status; # 可以看到日誌檔案的名字,和現在處在哪個位置 #6 連線從庫,配置連線主庫 #連線從庫 mysql -h 172.16.209.100 -P 33306 -u root -p123456 #配置詳解 /* change master to master_host='MySQL主伺服器IP地址', master_user='之前在MySQL主伺服器上面建立的使用者名稱', master_password='之前建立的密碼', master_log_file='MySQL主伺服器狀態中的二進位制檔名', master_log_pos='MySQL主伺服器狀態中的position值'; */ #命令如下 change master to master_host='101.133.225.166',master_port=33307,master_user='test',master_password='123',master_log_file='mysql-bin.000003',master_log_pos=0; #啟用從庫 start slave; #檢視從庫狀態(如下圖) show slave status\G; ####這兩個是yes表示配成功 Slave_IO_Running: Yes Slave_SQL_Running: Yes # 7 測試 #在主庫上建立資料庫test1 create database test1; use test1; #建立表 create table tom (id int not null,name varchar(100)not null ,age tinyint); #插入資料 insert tom (id,name,age) values(1,'xxx',20),(2,'yyy',7),(3,'zzz',23);