mysql主從複製要點

普通文件的數據同步
1.NFS 網絡共享能夠同步數據
2samba共享數據
3定時任務或守護進程結合rsync +scp
4 inotify +rsync觸發實時數據同步
5ftp數據同步
6ssh key+scp/rsync
mysql支持單向,雙向,鏈式級聯,實時異步複製,一臺服務器充當服務器,而另外一個服務器充當
slave服務器
應用場景有利於數據庫架構的健壯性,提高訪問速度和易於管理
主從服務器互爲備份
主從服務器架構的設置,能夠大大的增強數據庫架構的健壯性,例如:當主服務器
出現問題時,咱們能夠人工或自動的切換到服務器繼續提供服務
這相似咱們前面課程中的nfs存儲數據經過inotify+rsync同步備份到備份的nfs
很是相似,只不過mysql的同步方案,是其自帶的工具
非人爲的硬件,服務故障,對於人爲的drop,delete無能爲力
主從服務器讀寫分離承擔網站的壓力
主從服務器架構可經過php(大型網站),java或代理軟件(mysqlproxy,amoeba)對用戶的請求實現讀寫分離,則經過
從服務器上僅僅用戶的select查詢請求,下降用戶
門戶網站分佈式dbproxy,(讀寫分離,hash負債均衡,健康檢查)
一主多從
如何實現mysql主從讀寫分離
1.經過程序實現讀寫分離性能,效率最佳,推薦
php和java程序均可以經過設置多個鏈接文件的實現對數據庫的讀寫分離,既當select
時,就去鏈接讀庫的鏈接文件,當update insert delete時就鏈接寫庫的鏈接文件
2經過軟件實現讀寫分離
mysql-proxy,amoeba 等代理軟件也能夠實現讀寫分離功能,但最經常使用的仍是利用程序實現讀寫分離
注意事項:
1從庫兩個線程io(relay log),master(master info)主庫io
2鏈接ip用戶名密碼端口binlog名,pos
3確保主從庫基於這個位置點是有完整數據的
4.在master節點創建專門用於從庫同步的帳號
5.主庫要打開binlog開關,否者沒辦法實現同步
6.從庫打開start slave;
mysql主從複製過程
1.slave服務器上執行start slave開啓主從複製的開關
2.此時slave服務器的io線程會經過master 上受權的用戶權限請求鏈接master服務器
而且請求從指定binlog日誌問件的指定位置(日誌文件名和位置就是在配置主從服務器時執行change master命令時指定的))
3master服務接收到來自slave服務器的io線程請求以後,master服務器上負責複製io
線程更具slave服務器的io請求信息讀取指定binlog日誌文件指定的binlog日誌信息
而後返回給slave端的io線程新的binlog文件名以及下一個指定更新的位置
4當master服務器的io線程獲取到來自master服務器上的io線程發送日誌內容及其日誌位置
點以後,講binlog日誌內容依次寫到slave端自身的relay-log既中繼日誌文件mysql-relay-bin.xxx
的末端,並將新的binlog文件名和位置記錄到master-info文件中,以便下一次讀取master端新的
binlog日誌可以告訴master服務器須要重新的binlog日誌內容
5slave服務器端的sql線程將會實時的檢查本地的relaylog 中新加的日誌內容,而後及時的
把log文件中的內容解析在master端曾經執行的sql語句的內容,並在自身slave服務器上
按語句的順序執行應用這些sql語句,用完後清理應用過的日誌
6通過上面的過程,就能夠確保在master和slave端執行了一樣多的sql語句,當複製
狀態正常狀況下,master端和slave端的數據是徹底同樣的
從庫再寫binlog的時候不只要寫binlog並且還要修改log-slave-update
[root@localhost data]# killall mysqld;
[root@localhost data]# ps aux |grep 330
root     10050  0.0  0.0 103260   848 pts/1    S+   01:19   0:00 grep 330
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &
[root@localhost 3306]# ss -lnt |grep 330
LISTEN     0      50                        *:3307                     *:*     
LISTEN     0      50                        *:3306                     *:*     
定義3306爲主(my.cnf打開binlog,server_id=1)
定義3307爲從
1.注意上面的兩個參數要放在my.cnf中的[mysqld]模塊下,否則要出錯
2.server-id 的值最好使用服務器ip地址最後8位如19 目的是爲了防止不一樣機器或者
實例id重複0《serverid》2^32-1的天然數
3.要在my.cnf裏配置文件中查找相關參數,並按照要求更改,不存在時修改參數,不能重複
4.修改my.cnf後要從新啓動數據庫,命名爲/data/3306/data restart 注意確認要重啓了
192.168.88.172
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*TO root@'192.168.88.172' IDENTIFIED BY 'admin';         
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      346 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)



mysql> flush table with read lock ;
Query OK, 0 rows affected (0.01 sec)
在master上新建一個窗口
[root@localhost 3306]# mysqldump -uroot -padmin -S /data/3306/mysql.sock -A -B --events |gzip >~/rep.sql.gz;

[root@localhost ~]# gzip -d rep.sql.gz
[root@localhost ~]# mysqldump -uroot -padmin -S /data/3306/mysql.sock -A -B --events --master-data=2 >~/abc.sql
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      346 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
把主庫之前的東西寫在從庫,以保持一致
[root@localhost 3306]#  mysql -uroot -padmin -S /data/3307/mysql.sock <~/abc.sql;
在從庫;
change master to
master_host='192.168.88.172',
master_user='root',master_password='admin',
master_log_file='mysql-bin.000006',
master_log_pos=346;
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.88.172
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 346
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes(成功)
            Slave_SQL_Running: Yes(成功)
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 346
              Relay_Log_Space: 403
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0(落後主庫的秒數)
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

ERROR:
No query specified

mysql> CREATE database tt01;在主庫上執行
Query OK, 1 row affected (0.00 sec)
從庫
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d3306              |
| mysql              |
| performance_schema |
| test               |
| tt01               |
+--------------------+
6 rows in set (0.05 sec)

root@localhost ~]# cd /data/3307/data
[root@localhost data]# ls
d3306    ib_logfile0  ib_logfile2  mysql             performance_schema  test
ibdata1  ib_logfile1  master.info給io線程  mysqld_multi.log  relay-log.info 給socket     tt01
--master-data不須要文件點




php

相關文章
相關標籤/搜索