mysql主從配置

MySQL主從介紹:

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

MySQL主從是基於binlog的,主上須開啓binlog才能進行主從。主從主要做用:數據備份,負載均衡(讀寫分離)web

主從配置步驟:sql

1.主將更改操做記錄到binlog裏。數據庫

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

3.從根據relaylog裏面的sql語句按順序執行 主上有一個log dump線程,用來和從的I/O線程傳遞binlog 從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句落地。bash

 

主從配置準備工做:

準備兩臺機器,配置好基礎環境,都安裝好mysql並開啓mysql服務。服務器

 

配置主:

1.修改mysql主配置:負載均衡

vim /etc/my.cnf          #添加如下配置:ide

server-id=101            #定義server id ,可隨意定義
log_bin=zjy01            #定義binlog的log前綴,可隨意定義

重啓mysql服務:性能

/etc/init.d/mysqld restart

查看/data/mysql/下是否有對應log_bin定義的前綴文件生成:zjy.000001和zjy.index

 

2.建立測試所用數據庫和數據文件:

從原有的test數據庫導出數據:

mysqldump -uroot -p123456 test > /tmp/test.sql

建立新庫test2用於測試:

mysql -uroot -p123456 -e 「create database test2」

將導出的測試數據test.sql恢復到test2庫中:

mysql -uroot -p123456 test2 < /tmp/test.sql

 

3.建立並設置同步數據用戶相關:

建立一個mysql的用戶用於數據同步時使用:

mysql -uroot -p123456

mysql> grant replication slave on *.* to 'repl'@'192.168.1.101' identified by '123456';      #repl用戶,1.101爲從庫的IP

鎖定數據表

mysql> flush tables with read lock;                                       #暫時中斷寫入操做,保持此狀態進行同步

查看並記住file和position

mysql> show master status;                                                  #主從配置時用到

 

4.備份主庫全部數據庫:

mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql

......

 

    

1.修改mysql主配置:

vim /etc/my.cnf          #添加如下配置:

server-id=102              #與主不同

log_bin不須要配置

重啓mysql服務:

/etc/init.d/mysqld restart

 

2.拷貝主上備份的全部數據庫的備份sql文件並恢復:

拷貝備份文件

scp 192.168.1.101:/tmp/*.sql /tmp/

建立對應於主上的全部庫

mysql -uroot -p123456 -e 「create database test2」

mysql -uroot -p123456 -e 「create database test1」

mysql -uroot -p123456 -e 「create database zrlog」

......

恢復數據到數據庫:

mysql -uroot -p123456 test2< /tmp/test2.sql

mysql -uroot -p123456 zrlog< /tmp/zrlog.sql

......

 

3.配置從:

mysql -uroot -p123456

mysql> stop slave;

mysql> change master to master_host='192.168.1.101', master_user='repl', master_password='123456', master_log_file='zjy.000001', master_log_pos=542;                            #1.101爲主IP,zjy.000001和542爲住配置中第三步show master status;查看出來的file和position字段的內容

mysql> start slave;

查看是否配置主從成功:

mysql> show slave status\G          

*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.101
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: zjy.000002
          Read_Master_Log_Pos: 120
              Relay_Log_File: localhost-relay-bin.000005
                Relay_Log_Pos: 282
        Relay_Master_Log_File: zjy.000002
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
          Replicate_Do_Table:

 

主上解鎖表:

mysql -uroot -p123456

mysql> unlock tables;

 

參數介紹:Mysql的my.cnf配置文件中

主服務器:
binlog-do-db=                        #僅同步指定的庫
binlog-ignore-db=                    #忽略指定的庫

從服務器:
replicate_do_db=                     #同步指定的庫
replicate_ignore_db=                 #忽略指定的庫
replicate_do_table=                  #同步指定的表
replicate_ignore_table=              #忽略指定的表
#建議只使用下面2個語句,使用參數「replicate_wild_」,使匹配更精確,提高使用性能。
replicate_wild_do_table=  如zjy.%,支持通配符    
replicate_wild_ignore_table=

 

測試主從同步:

主操做:

mysql -utest2 

mysql> show tables;

mysql> select count(*) plugin;               #查看plugin表有多少行

mysql> truncate table plugin;               #清空表裏數據

mysql> drop table website;                   #刪除表website

 

從操做:

mysql -utest2                         

mysql> select count(*) plugin;               #查看plugin表是否已經清空數據

mysql> show tables;                              #查看website表是否已經不存在

 

 

千萬別在從上面刪除任何數據,一旦刪除就意味着數據不是一致,主從就失敗了!

須要從新備份恢復從新配置主從

相關文章
相關標籤/搜索