MySQL主從介紹mysql
(兩臺機器數據同步)linux
主:-->binlogsql
從:-->relaylog數據庫
主上有一個log dump線程,用來和從的I/O線程傳遞binlogapp
從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句落地(執行)ide
主從的應用場景:測試
(1)作數據的備份,(主:做讀寫數據,從:實時同步,當 主 宕機時,從 也能夠即便提供服務 )spa
(2)也是作備份。(客戶從 從 這臺機器上讀取數據(可是不能再從上寫),減輕主的壓力)線程
準備工做3d
1.兩臺機器都裝上mysql,而且都開啓mysql的服務
======================== 配置主========================
主:192.1683.136.133 從:192.168.136.134
1.修改my.cnf,增長server-id=133和log_bin=canshenglinux1
log-bin=mysql-bimlog
binlog_format=mixed
server-id = 159
binlog-do-db = bim #指定數據庫
binlog-do-db = bam
binlog-do-db = apphub
2.修改完配置文件後,啓動或者重啓mysqld服務
重啓完後,咱們能夠發如今/data/mysql下生成了以在配置文件中定義log_bin=canshenglinux1爲開頭的文件
這些文件很重要,否則不能實現主從
3.把mysql庫備份並恢復成cansheng庫,做爲測試數據(這個庫就是用來作主從)
mysqldump -uroot -p123456 mysql > /tmp/mysql.sql
mysql -uroot -p123456 -e 「create database cansheng」
mysql -uroot -p123456 cansheng < /tmp/mysql.sql
4.建立用做同步數據的用戶
(1)先進入到mysql
(2)再建立同步數據的用戶------注意修改參數
grant replication slave on *.* to 'repl'@slave_ip identified by '123456';
5.鎖定一下表:
flush tables with read lock;
(爲了同步前數據一致。)
show master status (查看一下position和file)
(退出mysql)
此時查看一下/data/mysql又是什麼庫
(通常同步不要同步mysql庫,由於裏面有不少用戶名和密碼)
6.備份一下所須要同步的庫:
mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql
===================配置從=======================
1.查看my.cnf,配置server-id=134,要求和主不同
2.修改完配置文件後,啓動或者重啓mysqld服務
/etc/init.d/mysqld restart
3.把主上須要同步的庫複製過來:
scp 192.168.136.133:/tmp/*.sql /tmp/
臨時建立alias,方便使用命令:
alias 'mysql=/usr/local/mysql/bin/mysql'
alias 'mysqldump=/usr/local/mysql/bin/mysqldump'
4.進入mysql
建立相對應的庫:
create database cansheng;
create database zrlog;
create database mysql2;
5.數據恢復:
mysql -uroot cansheng < /tmp/mysql.sql
6.進入mysql
(1)stop slave;
(2)change master to master_host='192.168.136.133', master_user='repl', master_password='123456', master_log_file='canshenglinux1.000002', master_log_pos=646207;
(3)start slave;
(4)斷定主從是否配置成功
show slave status\G
這樣是表示不成功配置成功的要出現兩個yes才成功。
不成功的因素:
(1)防火牆 systemctl stop firewalld
(2)selinux -->關閉 sentenforce 0
(3)用戶名是否正確
{而個人因素是在配置主的時候指定用戶名和密碼錯誤了,從頭來了一次}
7.回到主,進到mysql解除table(表)的鎖定
unlock tables;
至此完成主從配置:
===========測試主從同步=====================
(只須要在主或者從,其中一個配置就能夠了。這些參數默認是沒有配置的,沒有手動配置,那默認是同步全部的庫)
在從上配置儘可能使用最後兩個,能夠避免在忽略某個庫或者表時,當級聯查詢的時候避免出現數據丟失,不應忽略的也忽略了!!
測試主從是否成功,是否同步!
1.兩臺機器都進到mysql下,進到測試的數據庫:cansheng2
此時清空主上的comment表;看看從上的comment表數據是否也清空,從而同步。
truncate table comment;
刪除表測試:
咱們不能再 從 這臺機器上執行mysql操做,否則這時咱們的主從就斷開。
(由於此時咱們的position已經改變)
若是此時咱們的主從斷開了,應該從新執行
(1)stop slave;
(2)change master to master_host='192.168.136.133', master_user='repl', master_password='123456', master_log_fil_log_file='canshenglinux1.000002', master_log_pos=646207;
(3)start slave;
(4)斷定主從是否配置成功
show slave status\G
這樣是表示不成功配置成功的要出現兩個yes才成功。