14-3 17 MySQL主從配置

MySQL主從配置

17.1 MySQL主從介紹

概念mysql

  • MySQL主從又叫作Replication、AB複製。
  • 假設A機器做爲主Master,B機器做爲從Slave。MySQL主從實現A,B數據實時同步
  • 基於binlog,主上須要開啓

主從原理linux

  • A經過log dump線程與B的I/O線程通訊,使binlog與relaylog同步,relaylog再經過SQL線程將數據寫入B。從而實現AB複製

  • A上寫入數據——>數據變更記入binlog——>交給A上logdump線程——>交給B上I/O線程——>數據變更記入relaylog——>經過B上SQL線程——>數據寫入B

場景:sql

  1. B做爲備份
  2. B做爲可讀,減輕A訪問壓力

17.2 準備工做

  1. 安裝MySQL wget tar mv 安裝(./scripts/mysql_install_db --user= --datadir=)
  2. 配置my.cnf 配置服務腳本cp(support-file/mysql.server /etc/init.d/mysqld)
  3. 啓動服務

MySQL啓動異常,查看日誌數據庫

cd /data/mysql
less 主機名.err

...[ERROR]...Permission denied ... 
...[ERROR]...read-write mode
  • 常見錯誤:權限問題,可能因爲innobackup恢復後變爲root

17.3 配置主

A機器做爲主,IP爲10.1.1.8服務器

  • 主上配置主要有四步
    1. 開啓主,加ID
    2. 準備庫和同步用戶
    3. 鎖表,看主信息
    4. 作給B起始數據

第一步,開啓主(binlog)less

[root@axiang-02 ~]# vi /etc/my.cnf,
[mysqld]下增長
server-id=8
log_bin=axianglinux1
[root@axiang-02 ~]# /etc/init.d/mysqld restart  //重啓
[root@axiang-02 ~]# cd /data/mysql
[root@axiang-02 mysql]# ls -lt
總用量 176184
-rw-rw---- 1 mysql mysql       22 8月  30 15:01 axianglinux1.index  binlog索引,主從根本
-rw-rw---- 1 mysql mysql      120 8月  30 15:01 axianglinux1.000001 第一個二進制binlog文件

第二步:準備庫和同步用戶ide

參照blog庫製做axiang用於測試測試

[root@axiang-02 mysql]# mysqldump -uroot -paxianglinux blog > /tmp/blog.sql
[root@axiang-02 mysql]# mysql -uroot -paxianglinux -e "create database axiang"
[root@axiang-02 mysql]# mysql -uroot -paxianglinux axiang < /tmp/blog.sql
[root@axiang-02 mysql]# ls -lt
總用量 176184
-rw-rw---- 1 mysql mysql      220 8月  30 15:08 axianglinux1.000001
drwx------ 2 mysql mysql       20 8月  30 15:08 axiang

建立用做同步數據的用戶線程

[root@axiang-02 mysql]# mysql -uroot -paxianglinux
mysql> grant replication slave on *.* to 'repl'@'10.1.1.9' identified by 'axianglinux';

第三步,鎖表並查看主信息rest

mysql> flush tables with read lock;  鎖表
mysql> show master status;
+---------------------+----------+--------------+------------------+-------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------+----------+--------------+------------------+-------------------+
| axianglinux1.000001 |      425 |              |                  |                   |
+---------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

第四步,作給B起始數據

[root@axiang-02 mysql]# mysqldump -uroot -paxianglinux cms > /tmp/cms.sql
  • 同步axiang blog cms三個庫,起始的數據要一致。
  • 能夠經過mysqldump生成cms.sql blog.sql。複製給B機器

17.4 配置從

B機器做爲從,IP爲10.1.1.9

  • 從上配置主要有三步
    1. 加入ID
    2. 複製並同步A的起始數據
    3. 開啓從

第一步,加入ID

[root@axiang-03 ~]# vi /etc/my.cnf
[mysqld]下加入
server-id=9  //不須要binlog,id不能與主同樣,建議寫IP末位

第二步,同步起始數據數據

[root@axiang-03 ~]# scp 10.1.1.8:/tmp/*.sql /tmp/  //遠程複製過來
[root@axiang-03 ~]# mysql -uroot -paxianglinux

mysql> create database cms;
mysql> create database axiang;
mysql> create database blog;

[root@axiang-03 ~]# mysql -uroot -paxianglinux blog < /tmp/blog.sql 
[root@axiang-03 ~]# mysql -uroot -paxianglinux axiang < /tmp/blog.sql 
[root@axiang-03 ~]# mysql -uroot -paxianglinux cms < /tmp/cms.sql

第三步開啓從

[root@axiang-03 ~]# mysql -uroot -paxianglinux
mysql> stop slave;
mysql> change master to master_host='10.1.1.8', master_user='repl', master_passwoord='axianglinux', master_log_file='axianglinux1.000001', master_log_pos=425;
mysql> start slave;
mysql> show slave status\G

  • 還要到主上執行 unlock tables

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=
  • 通常使用最後兩個replicate,由於前四個replicate匹配模糊,當選擇了非監聽庫後,會忽略以後的操做。可能會致使數據丟失

測試結論

  • 開啓主從後,若是起始數據不一致,對庫,表,字段的操做。只要邏輯可行,則會保持主從同步的。好比主刪除一個從上沒有的用戶,會致使主從斷開。可是主添加新用戶,刪除兩邊都有的用戶則能夠同步
  • 從上只能進行查詢操做。修改,添加會致使主從斷開,須要按照新主狀態show master status重新連接
相關文章
相關標籤/搜索