1. 程式人生 > >MySQL主從介紹、配置主從、測試主從

MySQL主從介紹、配置主從、測試主從

復制。 col RoCE 線程 信息 數據 求和 ase 啟動

一、 MySQL主從介紹

MySQL主從又叫做Replication、AB復制。簡單講就是A和B兩臺機器做主從後,在A上寫數據,另外一臺B也會跟著寫數據,兩者數據實時同步的
MySQL主從是基於binlog的,主上須開啟binlog才能進行主從。
主從過程大致有3個步驟:
1)主 將更改操作記錄到binlog裏
2)從 將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog裏
3)從 根據relaylog裏面的sql語句按順序執行
主 上有一個log dump線程,用來和從的I/O線程傳遞binlog
從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另外 一個SQL線程用來把relaylog裏面的sql語句落地。

技術分享圖片
mysql主從一般應用在數據備份及不僅備份且去從上讀數據。不可以去從上主機上寫入數據,只可以讀。這是它們的一個特性。

二、準備工作

1?準備兩臺機器,裝好mysql服務。

三、配置主

1)、修改my.cnf,增加server-id=130和log_bin=riven1(bin_log的前綴)
vim /etc/my.cnf

2)、修改完配置文件後,啟動或者重啟mysqld服務
/etc/init.d/mysqld restart 重啟完成後後在/data/mysql下面生成以riven1為前綴的文件。

3)、把mysql庫備份並恢復成riven1庫,作為測試數據
備份blog數據庫: mysqldump -uroot -ppassword blog > /tmp/blog.sql

查看大小: du -sh /tmp/blog.sql
創建一個庫: mysql -uroot -e “create database riven1”
4)、恢復blog數據庫到riven1庫上:mysql -uroot riven1 < /tmp/blog.sql
5)、創建用作同步數據的用戶:
grant replication slave on . to ‘repl‘@slave_ip identified by ‘password‘;
(只給replication slave權限,指定從ip )
鎖表不要往裏面寫數據: flush tables with read lock;
查看表:show master status;
記住file 及position
備份其它數據庫:
zrlog
mysql

四、 配置從

1)、查看my.cnf,配置server-id=132,要求和主不一樣
vi /etc/my.cnf
2)、修改完配置文件後,啟動或者重啟mysqld服務
/etc/init.d/mysqld restart
3)、把主上aming庫同步到從上
scp 主ip:/tmp/*.sql /tmp/
然後進入mysql
4)、可以先創建riven1、blog、zrlog,恢復它們:
退出數據庫
mysql -uroot blog < /tmp/blog.sql
mysql -uroot riven1 < /tmp/riven1.sql
mysql -uroot zrlog < /tmp/riven1.sql
查看/data/mysql目錄是不是跟主上的一樣了。
ls /data/mysql
5)、進入mysql ,
mysql -uroot -ppasswd
stop slave;
change master to master_host=‘主ip‘, master_user=‘repl‘, master_password=‘密碼‘, master_log_file=‘在主上要記的file‘, master_log_pos=主上的position;
start slave;
7)、查看主從有沒有配置成功:
從上執行mysql -uroot
show slave stauts\G
看是否有
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
還需關註
Seconds_Behind_Master: 0 //為主從延遲的時間
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
有沒有error信息。
8)、還要到主上恢復讀寫,執行 unlock tables

五、測試主從同步

1)、主服務器上
binlog-do-db= //僅同步指定的庫
binlog-ignore-db= //忽略指定庫
2)、從服務器上
replicate_do_db=
replicate_ignore_db=
replicate_do_table=
replicate_ignore_table=
上面四個可以盡量不用
replicate_wild_do_table= //如aming.%, 支持通配符%
replicate_wild_ignore_table=

3)、主上 mysql -uroot riven1
切換庫:use riven1;
查看表:show tables;
看下有多少行:select count(*) from db;

清空一行:
truncate table db;
刪除一個表: drop table wp_users;
查看表有沒有存在:select count(*) from wp_users;
到從上 mysql -uroot aming

如果刪掉了做主從的表,那就只能重新做了。change master.

select count(*) from db;
主上繼續drop table db;
從上查看db表

MySQL主從介紹、配置主從、測試主從