rhel6 mysql replication
MySQL 支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其它服務器充
當從服務器。主服務器將更新寫入二進制日志文件,并維護文件的一個索引以跟蹤日志循環。這
些日志可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器從服
務器在日志中讀取的最后一次成功更新的位置。從服務器接收從那時起發生的任何更新,然后封
鎖并等待主服務器通知新的更新。
請注意當你進行復制時,所有對復制中的表的更新必須在主服務器上進行。否則,你必須要小心,
以避免用戶對主服務器上的表進行的更新與對從服務器上的表所進行的更新之間的沖突。
單向復制有利于健壯性、速度和系統管理:
1. 主服務器/從服務器設置增加了健壯性。主服務器出現問題時,你可以切換到從服務器作為備份
2. 通過在主服務器和從服務器之間切分處理客戶查詢的負荷,可以得到更好的客戶響應時間。
SELECT 查詢可以發送到從服務器以降低主服務器的查詢處理負荷。但修改
數據的語句仍然應發送到主服務器,以便主服務器和從服務器保持同步。如果非更新查詢為主,該
負載均衡策略很有效,但一般是更新查詢。
3. 使用復制的另一個好處是可以使用一個從服務器執行備份,而不會干擾主服務器。在備份過程
中主服務器可以繼續處理更新。
MySQL 提供了數據庫的同步功能,這對我們實現數據庫的冗災、備份、恢復、負載均衡等都是
有極大幫助的。
?
?
實驗環境:
RHEL 6 mysql5.1.52
master 192.168.0.11
slave1 192.168.0.12
slave2 192.168.0.13
mysql 的 AB 復制
注: mysql 數據庫的版本,兩個數據庫版本要相同,或者 slave 比 master 版本高!
在 master slave 上安裝 mysql 軟件
mysql 軟件可以在 http://www.mysql.com[/上下載,源碼或是 rpm 包都可以,由于 RHEL6 自帶
mysql 軟件包,直接 yum 安裝。
# yum install mysql mysql-server -y
master server 配置
1)配置 /etc/my.cnf 配置文件
在[mysqld]下添加一下參數
log-bin=mysql-bin #啟動二進制日志系統
binlog-do-db=test #二進制需要同步的數據庫名,如果需要同步多個庫,例如要再同步 westos
庫,再添加一行“binlog-do-db=westos”,以此類推
server-id=1 #必須為 1 到 232–1 之間的一個正整數值
binlog-ignore-db=mysql #禁止同步 mysql 數據庫
2 ) 啟動 master
# service mysqld start
3)創建同步帳戶,并給予權限
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO westos@'192.168.0.12'
IDENTIFIED BY 'westos';
mysql>Flush privileges;
調試:
在 master 上用下面的命令查看
mysql> show master status;
+---------------------+-----------+----------------+--------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+-----------+----------------+--------------------+
| mysql-bin.000001| 106 | test | mysql? |
+---------------------+-----------+----------------+--------------------+
記錄 File 和 Position 的值,下面會用到。
slave1server 配置
1 )配置 /etc/ my.cnf 文件
在[mysqld]下添加一下參數
server-id=2 #從服務器 ID 號,不要和主 ID 相同,如果設置多個從服務器,每個從服務器必
須有一個唯一的 server-id 值,必須與主服務器的以及其它從服務器的不相同。
可以認為 server-id 值類似于 IP 地址:這些 ID 值能唯一識別復制服務器群集
中的每個服務器實例。
2 ) 啟動 slave
# service mysqld start
3) 在 slave1 上執行一下命令
mysql> change master to master_host='192.168.0.11', master_user='westos',
master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=106;
Query OK, 0 rows affected (0.28 sec)
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
.....
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.....
如果都是 yes,表示從庫的 I/O,Slave_SQL 線程都正確開啟.表明數據庫正在同步
你也可以通過在 master server 上的 test 庫中添加數據,看 slave server 是否同步,更多詳細信息以及
參數設置,請參考 MySQL Manual 手冊.
注意:在同步之前確保 master 與 slave 上的數據一致性。
相關文件作用:
1. mysql-bin.index:服務器一旦開啟二進制日志,會產生一個與二日志文件同名,但是以.index 結尾
的文件。它用于跟蹤磁盤上存在哪些二進制日志文件。MySQL 用它來定位二進制日志文件。
2. mysqld-relay-bin.index:該文件的功能與 mysql-bin.index 類似,但是它是針對中繼日志,而不是
二進制日志。
3. master.info:保存 master 的相關信息。不要刪除它,否則,slave 重啟后不能連接 master。
4. relay-log.info:包含 slave 中當前二進制日志和中繼日志的信息。
如果寫操作較少,而讀操作很多時,可以采取這種結構。你可以將讀操作分布到其它的 slave,從而減小
master 的壓力。但是,當 slave 增加到一定數量時,slave 對 master 的負載以及網絡帶寬都會成為一個嚴重
的問題。這種結構雖然簡單,但是,它卻非常靈活,足夠滿足大多數應用需求。
當設置 log_slave_updates 時,你可以讓 slave 扮演其它 slave 的 master。此時,slave 把 SQL 線程執行的事
件寫進行自己的二進制日志(binary log),然后,其它的 slave 可以獲取這些事件并執行它,從而有效緩解
master 的壓力。如下:
添加一個 slave2:
1. 由于 master 上已經有數據,而新加的 slave2 沒有,必須在配置復制前同步數據。
1)在 master 上執行一下命令
mysql> FLUSH TABLES WITH READ LOCK; #鎖表
mysql> mysqldump --all-databases --lock-all-tables > backup.db
mysql> UNLOCK TABLES;? #表解鎖
2)如果你僅使用 MyISAM 表,你可以使用 mysqlhotcopy 拷貝,即使服務器正在運行。
# mysqlhotcopy -u root -p westos mysql bakcup
2. 在 slave1 上加入以下設置:
# vi /etc/my.cnf
….
server-id=2
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-do-db=test
log-slave-updates
….
# /etc/init.d/mysqld restart
3. 在 slave1 上創建同步帳戶,并給予權限
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO westos@'192.168.0.12'
IDENTIFIED BY 'westos';
mysql>Flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 217 | test | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
4. 在 slave2 上添加配置:
# vi /etc/my.cnf
server-id=3
# /etc/init.d/mysqld start
5. 在 slave2 上執行一下命令
mysql> change master to master_host='192.168.0.12', master_user='westos',
master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=217;
mysql> slave start;
mysql> show slave status\G;
.....
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/linux-super-meng/p/3821256.html
總結
以上是生活随笔為你收集整理的rhel6 mysql replication的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最佳日志实践
- 下一篇: linux cmake编译源码,linu