十四周三次課、MySQL主從配置


說明:有很多同窗不能一次性把實驗作成功,這是由於還不熟悉,建議至少作3遍html

注意:作實驗先關閉防火牆mysql

17.1 MySQL主從介紹

• MySQL主從又叫作Replication、AB複製。簡單講就是A和B兩臺機器作主從後,在A上寫數據,另一臺B也會跟着寫數據,二者數據實時同步的

• MySQL主從是基於binlog的,主上須開啓binlog才能進行主從。linux

• 主從過程大體有3個步驟sql

• 1)主將更改操做記錄到binlog裏數據庫

• 2)從將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog裏vim

• 3)從根據relaylog裏面的sql語句按順序執行bash

• 主上有一個log dump線程,用來和從的I/O線程傳遞binlog服務器

• 從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句落地架構

主從同步 :less

      主服務器 :受權容許同步:

              (1)NS記錄;

             (2)受權容許區域傳送

    從服務器 : 

            (1)只需定義區域

MySQL主從原理圖

 

 


17.2 準備工做

準備兩臺機器,都安裝mysql服務,機器01: IP:192.168。133.130做爲主庫,機器02:IP:132做爲從庫。

一、先切換到cd /usr/local/src/,wget下載MySQL,在兩臺機器上面,而後解壓。

二、把解壓完的目錄放到/usr/localmysql,     命令:mv mysql-5.6.35-linux-glibc2.5-x86_64    /usr/local/mysql,,,,先檢查有沒有這個/usr/local/mysql目錄。若是有,就更名字。。。移動完成後,

使用命令查看:ls /usr/local/mysql  ,發現目錄下面有:bin、data、include、man、lib。

 

三、先建立用戶,useradd=mysql,   初始化:./scripts/mysql_install_db --user=mysql --datadir=/data/mysql    ,查看有沒有初始化完成,命令:echo $?

 

四、vi /etc/my.cnf,  把datadir後面修改爲datadir=/data/mysql

五、cp support-files/mysql.server /etc/init.d/mysqld         #把啓動腳本複製到/etc/init.d/mysqld

 

六、vim   /etc/init.d/mysqld    中定義basedir和datadir,    , ,   ,命令:basedir=/usr/local/mysql和datadir=/data/mysql

七、啓動mysql服務,/etc/init.d/mysqld start

若是報錯,就cd /data/mysql 再使用命令ls,查看mysql目錄下的文件。查看錯誤日誌,命令:tail +主機名.err,   ,  

只有命令:less !$,翻頁查看

使用命令:ls -l /data/mysql,查看所屬組和所數者是否是root,沒有說明正常。若是是,說明有問題要修改過

修改方法:

在機器01上面操做

[root@ocalhost mysql]# chown -R mysql:mysql                       # 所屬組和所數者爲mysql
[root@localhost ] # /etc/init.d/mysqld start                         啓動mysql服務
Staring MySQL.SUCCESS                                #啓動成功
[root@localhosts ~]# !ps                   #查看啓動的mysql服務

在機器02查看啓動mysql

[root@ocalhost 02]# ls /usr/local/mysql                     # 所屬組和所數者爲mysql
bin      data      include     man   my-new.cnf     README   share  support-files
[root@localhosts 02~]# /etc/init.d/mysqld start                        #啓動mysql服務
[root@localhosts ~]# ps aux | grep mysql                         #有mysql字樣和端口信息,MySQL說明啓動了

 

 


17.3 配置主

• 安裝mysql

• 修改my.cnf,增長server-id=130和log_bin=aminglinux1      #01終端的名字

• 修改完配置文件後,啓動或者重啓mysqld服務

• 把mysql庫備份並恢復成aming庫,做爲測試數據

• mysqldump -uroot mysql > /tmp/mysql.sql

• mysql -uroot -e 「create database aming」

• mysql -uroot aming < /tmp/mysql.sql

• 建立用做同步數據的用戶

• grant replication slave on *.* to 'repl'@slave_ip identified by 'password';

• flush tables with read lock;

• show master status;

實例:

在機器01上面操做

第一步

修改配置文件

[root@ocalhost mysql]# vi /etc/my.cnf                 # aminglinux1  01終端的名字

[root@localhost mysql]# /etcinit.d/mysqld restart         #重啓MySQL服務  
[root@ocalhost mysql]#  pwd              #查看當前的目錄
/data/mysql
[root@ocalhost mysql]# ls -lt                 #查看有沒有生成aminglinux文件
...... 1   mysql   mysql    238972323 .. ... ... ..  aminglinux1.0001       
...... 1   mysql   mysql    238972323 .. ... ... ..  aming       #數據庫的名字
...... 1   mysql   mysql   238972323 .. ... ... .. aminglinux.index       #實現主從的文件
...... 1   mysql   mysql  238972323 .. ... ... ..  blog        #接下來須要的blog文件

第二步

[root@ocalhost mysql]# mysqldump -uroot -p aminglinux blog > /tmp/blog.sql     #備份blog文件
[root@localhost mysql]# du sh /tmp/blog.sql         #    查看備份文件的大小
[root@ocalhost mysql]# mysql -uroot -p aminglinux -e "create database aming"       #-e 建立一個新的庫
[root@localhost mysql]# mysql -uroot -p aminglinux aming < /tmp/blog.sql         #恢復blog文件到原來的地方

建立用做同步數據的用戶

[root@ocalhost mysql]# mysql -uroot -p aminglinux      #進入aming數據庫裏面
mysql> grant replication slave on *.* to 'repl'@192.168.133.132 identified by '123456';   



#指定權限  replication slave 全部的庫、全部的表,用戶repl,針對來源的IP,也就是02機器上的IP

鎖定表

 mysql > flush tables with read lock;
mysql > show master status;

mysql > quit        #退出來
[root@localhost mysql]# ls                #查看全部的數據庫
mysql    mysql2    zrlog
[root@ocalhost mysql]# mysql -uroot -p aminglinux mysql2 < /tmp/my2.sql    #把mysql2 移到my2.sql
[root@localhost mysql]# mysql -uroot -p aminglinux zrlog < /tmp/zrlog.sql    #把zrlog移到/tmp/zrlog.sql
[root@localhost mysql]# ls /tmp/*sql       #查看拷貝的文件
/tmp/zrlog.sql  /tmp/my2.sql  /tmp/blog.sql

 


17.4 配置從

• 安裝mysql

• 查看my.cnf,配置server-id=132,要求和主不同

• 修改完配置文件後,啓動或者重啓mysqld服務

• 把主上aming庫同步到從上

• 能夠先建立aming庫,而後把主上的/tmp/mysql.sql拷貝到從上,而後導入aming庫

• mysql -uroot

• stop slave;

• change master to master_host='', master_user='repl', master_password='', master_log_file='', master_log_pos=xx,

• start slave;

• 還要到主上執行 unlock tables

實例:

在02機器上面操做

[root@localhost ~]# ps aux | grep mysql           #查看mysql服務有沒有啓動
[root@ocalhost ~]# vi  /etc/my.cnf

[root@localhost ~]# /etcinit.d/mysqld restart            #重啓MySQL服務 
[root@localhost ~]# ls /data/mysql                    #查看/data/mysql下的文件   
[root@localhost ~]# scp 192.168.133.130:/tmp/*.sql /tmp/         #從01機器拷貝一些數據庫
[root@ocalhost mysql]# mysql -uroot
-bash:mysql:未找到命令     
[root@localhost mysql]# alias 'mysql=/usr/local/mysql/bin/mysql'
[root@ocalhost mysql]# alias 'mysqldump=/usr/local/mysql/bin/mysqldump'
[root@localhost mysql]# mysql -u root
 mysql > create database aming;
mysql > create database zrlog;               #建立兩個庫
mysql > create database blog
mysql > create database mysql2;
mysql > quit         #退出來
[root@localhost mysql]# mysql -uroot blog < /tmp/blog.sql                        # 恢復
[root@ocalhost mysql]# mysql -uroot zrlog < /tmp/zrlog.sql 
[root@localhost mysql]# mysql -uroot aming < /tmp/blog.sql 
[root@ocalhost mysql]# mysql -uroot aming < /tmp/blog.sql 
[root@localhost mysql]# mysql -uroot mysql2 < /tmp/my2.sql 
[root@ocalhost mysql]# ls /data/mysql

在機器01上面操做

[root@localhost mysql]# ls /data/mysql               #查看01和02上面的文件是否同樣

實現主從

在02上面操做

[root@ocalhost mysql]# mysql -u root
mysql > start slave;
mysql > stop slave;
mysql > change master to master_host='192.168.133.130', master_user='repl', master_password='123456', master_log_file='amingliunx1.000001', master_log_pos=474566;

mysql > start slave;                    #保存修改

查看主從同步是否正常

• 從上執行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:

實例:

在02機器上面操做

mysql > show slave status\G                #查看主從配置有沒有配置成功
若是有兩個yes,說明配置主從成功了;若是兩個有一個不YES,說明主從已經斷開了

在01機器上面操做

[root@localhost mysql]# mysql -uroot -p aminglinux
mysql > unlock tables;             #作完主從以後,恢復
mysql > exit

 

 


17.5 測試主從同步

幾個配置參數

• 主服務器上

• binlog-do-db=      //僅同步指定的庫

• binlog-ignore-db= //忽略指定庫

• 從服務器上

• replicate_do_db=

• replicate_ignore_db=

• replicate_do_table=                            #

• replicate_ignore_table=                          #

• replicate_wild_do_table=   //如aming.%, 支持通配符%

• replicate_wild_ignore_table=

 

• 主上 mysql -uroot aming 

• select count(*) from db;

• truncate table db;

• 到從上 mysql -uroot aming

• select count(*) from db;

• 主上繼續drop table db;

• 從上查看db表

實例:

主上 01上面

mysql > ​use aming;​​​​​       #登錄aming庫
mysql > show tables;         #查看阿明數據庫

mysql > select count(*) wp_users;     #查看行數

 

mysql > 
mysql > 

在 02上面操做

mysql > use aming;
mysql > select count(*) from wp_users;

主上 01上面

mysql > truncate table wp_users            #清空
mysql > select count(*) from wp_users;            #查看數據庫裏面的東西有沒有被清空,

mysql > select * from wp_users;                   #若是上一步沒有清空,執行這一步

在 02上面操做,清空數據庫

mysql > select count(*) from wp_users; #查看數據庫裏面的東西有沒有被清空,

mysql >  select * from wp_users;                   #再檢測一次,是否被清空

 

測試再主上面刪除一個表,再從上面查看,是否查找到

mysql > drop table wp_users;                 #刪除wp_users表
mysql > 

在02機器,從的上面查看

mysql > select * from wp_users;
mysql > drop databas aming;                       #刪除aming庫
mysql > show slave status\G          #測試主從配置有沒有出錯誤。

而後再01上面散出阿明表,在02上面測試

mysql > mysql > drop databas aming; #刪除aming庫

在02機器,從的上面查看

mysql > show slave status\G #測試主從配置有沒有出錯誤。

 

常見問題:

主從庫正常運行的時候,可否刪除多餘的bin-log日誌,刪除後會不會對主從庫有意響,如何正確的刪除bin-log

答:正確作法是在my.cnf配置日誌過時時間。 自動刪除。 

固然也能夠在mysql裏面去刪除http://www.jb51.net/article/117819.htm 

二、把從庫的數據所有恢復了,再去解鎖主庫的表;

 

若是是生產環境,我主庫備份的數據庫有10G多,我從庫還原完,再去解鎖主庫的表;

答:首先,作主從這種操做基本上是在架構搭建初期就作好了的,

  • 擴展裏面,我們不是有提到過,不停庫作主從的文章。 還有就是,儘可能選擇在凌晨,沒有啥用戶的時候作,金融類的,確定要發通知的。

     

三、

我在配置好了以後出現了錯誤:

Slave_IO_Running: connecting
Slave_SQL_Running: Yes

仔細檢查後發現主mysql配置受權的時候密碼有問題。

從新受權後再次查看狀態就ok了!切記必定要注意配置的各項參數!

答:後來檢查到是沒有關閉firewalld,selinux.

 

 

有的同窗,遇到主從不能正常同步,提示uuid相同的錯誤。這是由於克隆機器致使。 https://www.2cto.com/database/201412/364479.html

相關文章
相關標籤/搜索