MySQL 復制詳解及簡單實例
 主從復制技術在MySQL中被廣泛使用,主要用于同步一臺服務器上的數據至多臺從服務器,可以用于實現負載均衡,高可用和故障切換,以及提供備份等等。MySQL支持多種不同的復制技術,諸如單向,半同步異步復制等以及不同級別的復制,諸如數據庫級別,表級,跨庫同步等等。本文簡要描述了一個基本的主從復制并給出示例。 
1、復制的基本原理(步驟)
    a、在主庫上把數據更改記錄的二進制日志(binary log)
    b、從庫上的I/O線程連接到主庫并請求發送其二進制日志文件(主庫上的binlog dump線程將二進制日志內容發送到從庫)
    c、從庫上的I/O線程讀取主服務發送的二進制內容并將其拷貝到中繼日志
    d、從庫上的SQL線程讀取中繼日志并執行日志中包含的更新 
2、為配置文件添加復制項
| # 本文的演示基于同一服務器上的多實例環境,其中3406端口用作主庫,而3506用作從庫。 # 關于多實例的部署可參考: # MySQL多實例配置(一) http://blog.csdn.net/leshami/article/details/40339167 # MySQL多實例配置(二) http://blog.csdn.net/leshami/article/details/40339295 # 3406與3506為都為新裝且含缺省庫等,所以本文演示中未涉及先遷移主庫數據到備庫步驟 a、主庫上的配置文件 # more my3406.cnf [mysqld] socket = /tmp/mysql3406.sock port = 3406 pid-file = /data/inst3406/data3406/my3406.pid user = mysql log-error=/data/inst3406/data3406/inst3406.err datadir=/data/inst3406/data3406 basedir=/app/soft/mysql5 #### for master items #### server-id=3406 log_bin=/data/inst3406/log/bin/inst3406bin innodb_flush_log_at_trx_commit=1 sync_binlog=1 b、從庫上的配置文件 # more my3506.cnf [mysqld] socket = /tmp/mysql3506.sock # Author : Leshami port = 3506 # Blog : <a target="_blank" rel="external nofollow" >http://blog.csdn.net/leshami pid-file</a> = /data/inst3506/data3506/my3506.pid user = mysql log-error=/data/inst3506/data3506/inst3506.err datadir=/data/inst3506/data3506 basedir=/app/soft/mysql5 #### for slave items #### server-id=3506 relay_log=/data/inst3506/log/relay/relay-bin read_only=1 | 
3、創建復制賬號
| #啟動端口為3406的實例并添加賬戶 [mysql@app ~]$ mysqld_safe --defaults-file=/data/inst3406/data3406/my3406.cnf & [mysql@app ~]$ mysql -P3406 #登陸到3406 master@localhost[(none)]> show variables like 'server_id'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 3406 | +---------------+-------+ #創建用于復制的賬戶 master@localhost[(none)]> grant replication slave,replication client on *.* -> to repl@'192.168.1.177' identified by 'repl'; #初始化主庫日志文件,生成環境慎用reset master@localhost[(none)]> reset master; Query OK, 0 rows affected (0.01 sec) #查看主庫的狀態,日志初始化至000001, master@localhost[(none)]> show master status,Position為120 +--------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +--------------------+----------+--------------+------------------+-------------------+ | inst3406bin.000001 | 120 | | | | +--------------------+----------+--------------+------------------+-------------------+ |