mysql 主從復制
#################
### mysql 主從復制 ###
#################
1、MySQL 主從復制基本工作原理 :
主服務器將改變記錄記錄到她的二進制日誌中,從服務器將主服務器的二進制日誌復制到它的中級日誌中去,然後通過中級日誌改變它的數據,這樣就實現了主從復制。
2、Slave 的兩個線程:
I/O 線程:將主服務器的二進制日誌寫入到中繼日誌中去
sql 線程:讀取中繼日誌的內容,更新數據。
一、環境準備
主服務器:redhat6.5 IP:172.25.24.1 安裝 mysql server1
從服務器:redhat6.5 IP:172.25.24.2 安裝 mysql server2
二、配置:
1、主從服務器分別作以下操作:
1.1、版本一致
tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
yum install -y mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm
/etc/init.d/mysqld start
1.2、初始化表,並在後臺啟動 mysql
grep password /var/log/mysqld.log ##找出mysql初始密碼
mysql -p
1.3、修改 root 的密碼
mysql> ALTER USER [email protected] identified by ‘Westos+007‘;
2、修改主服務器 master:
vim /etc/my.cnf
在[mysqld]下添加一下參數
log-bin=mysql-bin #啟動二進制日誌系統
binlog-do-db=test #二進制需要同步的數據庫名,如果需要同步多個庫,例如要再同步 westos
server-id=1 #必須為 1 到 232–1 之間的一個正整數值
binlog-ignore-db=mysql #禁止同步 mysql 數據庫
/etc/init.d/mysqld restart #重啟mysql
mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected]%‘ IDENTIFIED BY ‘Westos+007‘; #創建同步帳戶,並給予權限
mysql> Flush privileges; #刷新
測試:
server2:
mysql -u panghu -p -h 172.25.24.1 ##登陸mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
server1:
mysql> show master status; ##查詢 master 的狀態
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 601 | test | mysql | |
註:執行完此步驟後不要再操作主服務器 MYSQL,防止主服務器狀態值變化
3、修改從服務器 slave:
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin ##[不是必須]啟用二進制日誌
server-id=2 ##[必須]服務器唯一 ID,默認是 1,一般取IP 最後一段,從服務器 ID 號,不要和主 ID 相同,如果設置多個從服務器,每個從服務器必須有一個唯一的 server-id 值,必須與主服務器的以及其它從服務器的不相同。可以認為 server-id 值類似於 IP 地址:這些 ID 值能唯一識別復制服務器群集中的每個服務器實例。
4、在主服務器上查看master_log_pos值:
cd /var/lib/mysql/
mysqlbinlog mysql-bin.000001
5、配置從服務器 Slave:
mysql> change master to master_host=‘172.25.24.1‘, master_user=‘panghu‘, master_password=‘Westos+007‘, master_log_file=‘mysql-bin.000001‘, master_log_pos=514; ##註意不要斷開,514數字前後無單引號。
mysql> start slave; ##啟動從服務器復制功能
6、檢查從服務器復制功能狀態:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.24.1 ##主服務器地址
Master_User: panghu ##授權帳戶名,盡量避免使用
Master_Port: 3306 ##數據庫端口,部分版本沒有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 601 ##同步讀取二進制日誌的位置,大於等於 Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000002
Relay_Log_Pos: 407
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes ##此狀態必須 YES
Slave_SQL_Running: Yes ##此狀態必須 YES
......
註:Slave_IO 及 Slave_SQL 進程必須正常運行,即 YES 狀態,否則都是錯誤的狀態(如:其中一個 NO 均屬錯誤)。
以上操作過程,主從服務器配置完成。
7、主從服務器測試:server1
主服務器 Mysql,建立數據庫,並在這個庫中建表插入一條數據:
mysql> create database test;
mysql> use test;
mysql> create table usertb (
-> username varchar(15) not null,
-> password varchar(25) not null);
mysql> desc usertb;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(15) | NO | | NULL | |
| password | varchar(25) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
mysql> insert into usertb values (‘user1‘,‘111‘);
mysql> select * from usertb;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
+----------+----------+
從服務器 Mysql 查詢:server2
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
mysql> use test;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| usertb |
+----------------+
mysql> select * from usertb;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
+----------+----------+
mysql 主從復制