概述:前面一直講高可用集羣,但是沒有講高可用集羣所真正服務的主角--數據庫。互聯網的基礎之基礎就是數據,數據庫的高可用技術也正是一個運維人員必不可少的技能。
本次集羣拓撲:
內核版本:2.6.32-431.el6.x86_64
發行版:Red Hat Enterprise Linux Server release 6.5 (Santiago)
mysql版本:mysql Ver 14.14 Distrib 5.1.71, for redhat-linux-gnu (x86_64) using readline 5.1
1.修改mysql配置文件
我們的拓撲爲三臺服務,但是slave2是爲了演示從slave1複製出數據庫的,現在只是做一個雙機備份。
master my.cnf:(最後三行爲添加的參數)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
slave1 my.cnf:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
重啓master和slave1的mysql服務
mysql> create user repl_user;
mysql> grant all privileges on *.* to 'repl_user'@'172.25.3.%' identified by 'redhat';
可能有的同學會問這樣豪放的給複製用戶權限是不是不太妥當呀,其實是因爲我一開始只給了(REPLICATION和SLAVE權限)但是發現主從複製不成功最後只能暫時先妥協,等我研究明白主從複製用戶到底明確需要哪幾個參數,並且那幾個參數的具體作用時,再回來進行補充。
3.配置slave上的mysql
mysql> CHANGE MASTER TO MASTER_HOST='172.25.3.60',MASTER_USER='repl_user',MASTER_PASSWORD='redhat',MASTER_PORT=3306;
上面命令確定了master的位置(ip),端口號,連接mysql的用戶,密碼。配置了這些數據後,再開啓slave的複製,mysql主從複製就可以正常進行了。
現在啓動slave
mysql> start slave
tips:如果你的master和slave1是剛裝好的mysql,建議清一下master的日誌使用RESET MASTER,然後再啓動slave。
4.觀察主從複製的狀態。
master狀態:
mysql> show master status\G
*************************** 1. row ***************************
File: master-bin.000001
Position: 185
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
第一行:是正在寫入的日誌,目前是master-bin.000001
第二行:寫入的位置
slave狀態:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.3.60
Master_User: repl_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 185
Relay_Log_File: slavse-relay-bin.000002
Relay_Log_Pos: 331
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主要看兩個參數,一個是Slave_IO_Running,另一個是Slave_SQL_Running,這兩個都爲yes的話,主從複製就是正常的狀態。
現在實際測試下
master:
創建一個test數據庫
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MO |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
slave:mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MO |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)