1. 程式人生 > >MySQL主從介紹、準備工作、準備工作、配置從、測試主從同步

MySQL主從介紹、準備工作、準備工作、配置從、測試主從同步

pos 相同 sel png mysql主從配置 hang server grant chkconfig

17.1 MySQL主從介紹
  • MySQL主從又叫做Replication、AB復制。簡單講就是A和B兩臺機器做主從後,在A上寫數據,另外一臺B也會跟著寫數據,兩者數據實時同步;
  • MySQL主從是基於binlog的,主上須開啟binlog才能進行主從。
  • 主從過程大致有3個步驟
    • 主將更改操作記錄到binlog裏
    • 從將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog裏
    • 從根據relaylog裏面的sql語句按順序執行
  • 主上有一個log dump線程,用來和從的I/O線程傳遞binlong
  • 從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另外一個sql線程用來把relaylog裏面的sql語句落地
    MySQL主從原理圖:
    技術分享圖片

17.2 準備工作

  • 安裝mysql

備註:

#設置開機啟動
[root@taoyun ~]# chkconfig mysqld on

請查閱之前的文章:http://blog.51cto.com/3622288/2056837 12.2小節

17.3 配置主

  • 修改my.cnf
[root@taoyun ~]# vi /etc/my.cnf

#增加server-id=130和log_bin=taoyuan
socket=/tmp/mysql.sock #如下增加
server-id=12 #可以自定義,如設定為IP地址192.168.0.12 中的12
log_bin=taoyuan
  • 修改完配置文件後,啟動或重啟mysqld服務
[root@taoyun ~]# /etc/init.d/mysqld restart;

#查看文件
[root@taoyun ~]# cd /data/mysql/

[root@taoyun mysql]# ls -lt
-rw-rw----  1 mysql mysql       34 1月  23 16:57 taoyuan.index
-rw-rw----  1 mysql mysql      120 1月  23 16:57 taoyuan.000002
-rw-rw----  1 mysql mysql      143 1月  23 16:57 taoyuan.000001
#上述文件,必須有,不然主從無法完成
  • 把mysql可備份並恢復成taoyuan庫,作為測試數據
    • mysqldump -uroot mysql > /tmp/mysql.sql
    • mysql -uroot -e "create database taoyuan"
    • mysql -uroot taoyuan < /tmp/mysql.sql
  • 創建用作同步數據的用戶
#創建用戶
mysql> grant replication slave on *.* to ‘repl‘@‘192.168.0.10‘ identified by ‘taoyuan‘;
Query OK, 0 rows affected (0.00 sec)

#鎖表,防止再次寫入數據
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.03 sec)

#記住位置
mysql> show master status;
+----------------+----------+--------------+------------------+-------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+-------------------+
| taoyuan.000002 |   660574 |              |                  |                   |
+----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

17.4 配置從

  • 修改配置文件
[root@taoyun ~]# vi /etc/my.cnf
#增加server-id 跟主不一樣 可以設置成10
#log_bin 不需要設置,主才需要生成二進制文件,從不用

#重啟服務
[root@taoyun ~]# /etc/init.d/mysqld restart
  • 數據同步
#采用復制虛擬機操作,如果沒有可以用如下的命令進行同步
scp 192.168.0.12:/tmp/*.sql /tmp/

#恢復庫
mysql> create database taoyuan;
Query OK, 1 row affected (0.00 sec)

mysql> create database blog;
Query OK, 1 row affected (0.01 sec)
  • 實現主從
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host=‘192.168.0.12‘, master_user=‘repl‘, master_password=‘taoyuan‘, master_loog_file=‘taoyuan.000002‘, master_log_pos=660574;
Query OK, 0 rows affected, 2 warnings (0.04 sec)
#填寫show master status; 顯示的信息

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
  • 查看主從是否配置成功
mysql> show slave status\G

#還需到主上執行 unlock tables;

17.5 測試主從同步

  • 主上 mysql -uroot taoyuan
  • select count(*) from db;
  • truncate table db;
  • 到從上mysql -uroot aming;
  • select count(*) from db;
  • 主上繼續drop table db;
  • 從上查看db表

  • 幾個配置參數
    • 主服務器上
    • binlog-do-db= //僅同步指定的庫
    • binlog-ignore-db= //忽略指定庫
    • 從服務器上
    • replicate_do_db=
    • replicate_ignore_db=
    • replicate_do_table=
    • replicate_ignore_table=
    • 如下兩個常用
    • replicate_wild_do_table= //如taoyuan.%,支持通配符%
    • replicate_wild_ignore_table=

mysql主從配置uuid相同錯誤解決

配置mysql主從時,由於是拷貝的mysql目錄,導致主從mysql uuid相同, Slave_IO無法啟動,報錯信息如下:

The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解決辦法:修改mysql data 目錄下auto.cnf 文件中uuid的值,使兩臺mysql不同即可,修改後重啟mysql服務。

MySQL主從介紹、準備工作、準備工作、配置從、測試主從同步