Mysql 架構及優化之-主從複製同步部署


概念

主從複製:2臺以上mysql服務器, 作負載均衡, 主服務器負責增刪改 , 從服務器負責查詢mysql

同步原理:mysql開啓bin-log日誌,主服務器全部的增刪改操做會記錄到bin-log日誌
而後主服務器把bin-log日誌發送 給 從服務器 , 從服務器重放bin-log日誌 確保數據同步sql


開啓bin-log日誌

  • 配置 my.cnf 文件 並重啓 mysql數據庫

[root@localhost etc]# vim /etc/my.cnfvim

clipboard.png

[root@localhost etc]# service mysql restart服務器

  • 開啓以後 mysql-bin對應的文件 已經出現負載均衡

[root@localhost var]# cd /usr/local/mysql/var && ll測試

clipboard.png

  • 經過 show master status 命令查看 最新一個binlog日誌 及開始行數spa

mysql> show master status;線程

clipboard.png

  • 查看binlog日誌內容 可見 最新一行日誌在位置1073d

$ /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/var/mysql-bin.000001

clipboard.png

  • 測試刪除數據 可見 binlog文件新增日誌內容

clipboard.png

clipboard.png


bin-log日誌相關命令

  • flush logs

新建一個binlog日誌 增刪改日誌在新文件中插入 新的日誌end-log-positon 是
107行,107行記錄了mysql內部日誌

clipboard.png

  • reset master

清空全部bin-log日誌 只保留 mysql-bin.000001 文件

  • mysqlbinlog

查看bin-log日誌

/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/var/mysql-bin.000001

  • show binlog events 查看binlog記錄事件

clipboard.png

  • mysqlbinlog mysql -uroot -psmudge smudge_database

    #重放單個日誌
    /usr/local/mysql/bin/mysqlbinlog  
    /usr/local/mysql/var/mysql-bin.000002 | mysql -uroot -psmudge smudge
    
    # 重放指定位置 指定日期的日誌斷
    /usr/local/mysql/bin/mysqlbinlog
    
    --start-position=106 --stop-position=134
    
    --start-date="2016-05-13 17:30:05" --stop-date="2016-05-13 17:41:28" 
    
    /usr/local/mysql/var/mysql-bin.000002 | mysql -uroot -psmudge smudge

重放bin-log日誌 恢復數據 其實就是再把日誌中的sql語句執行 一邊而已
(注意:select 語句 和delete語句 不能夠放在一塊兒重放 由於你最後仍是得不到數據)
恢復原理就是:執行以前的insert語句 或者以前的update語句
若是你的單純的delete物理刪除 別想恢復了 由於再次執行的仍是delete語句


create 建立用戶 + grant用戶受權

  • 主服務器查看用戶密碼

mysql> select host,user,password from mysql.user;
clipboard.png

  • 添加主服務器用戶密碼

CREATE USER 'kang'@'192.168.206.132' IDENTIFIED BY 'smudge';

建立用戶kang 能夠在ip爲192.168.206.132主機上訪問數據庫

clipboard.png

給用戶kang受權全部的庫的權限
GRANT ALL ON *.* TO 'kang'@'192.168.206.132';

從服務器ip : 192.168.206.132
從服務器登陸主服務器

[root@localhost ~]#mysql -h192.168.206.128 -ukang -psmudge

可見服務器中的mysql服務能夠看成客戶端 能夠鏈接任何一臺mysql服務器進行操做


主服務器配置

主服務器ip : 192.168.206.128

  • 配置主服務器my.cnf 文件

vim /etc/my.cnf

clipboard.png

  • 配置以後刷新binlog文件

flush logs with read lock 確保得到一致性快照

等待主從binlog日誌同步完畢達到數據一致

  • 或者使用mysqldump備份sql 文件

將主服務器一致都是sql文件備份 傳遞到從服務器

mysqldump -uroot -psmudge smudge -l -F > '/home/smudge.sql'

-l 是指鎖表 防止新數據插入

-F 是刷新 生成一個新的binlog日誌

(若是你數據庫中有merge表 容易會提示Unable to open underlying table which is differently defined or ofnon-MyISAM type ordoesn't exist when using LOCK TABLES )

clipboard.png

  • 使用scp隧道傳輸命令 傳遞文件

scp /home/smudge.sql 192.168.206.132:/home

clipboard.png


從服務器配置

  • 恢復一部分主服務器備份的數據

新建smudge庫

clipboard.png

mysql導入sql文件

[root@localhost ~]# mysql -uroot -psmudge smudge < /home/smudge.sql

  • 配置從服務器my.cnf文件

vim /etc/my.cnf

其中用戶名和密碼就是上述咱們在主服務器添加的信息

clipboard.png

(若是你的mysql版本5.1(mysql>status查看)以前的,配置這4項,啓動以後就沒必要使用change master 命令 進行主動同步)

保存並重啓mysql

  • 查看主服務器master binlog 文件

clipboard.png

  • 啓動slave進程,開啓主從同步

由於個人mysql版本是5.7的, 因此我使用change master 命令

change master to
master_host='192.168.206.128',master_user='kang',master_password='smudge',
(master_log_file='mysql-bin.000005',master_log_pos=759); (初始化配置可選)

start slave 啓動同步服務

  • show slave status 查看從服務器狀態

clipboard.png

代表同步功能已經開啓


從服務器經常使用命令

start slave 啓動複製線程
stop slave 中止複製線程
show master logs 查看主數據庫日誌
change master to master_host ,master_user 動態切換主數據庫
show processlist 查看運行進程 (主動服務器都適用)


常見錯誤排錯

  • show slave status 檢查主動狀態

clipboard.png 數值爲NO

clipboard.png 數值爲NULL

代表同步出現了故障 多是slave服務器執行了寫操做或者從服務器重啓有事務回滾操做

  • 解決

從服務器: stop slave 關閉複製線程

主服務器:show master status 查看最新二進制文件和位置偏移量

從服務器執行:change master to master_host ...
master_log_file='mysql-bin.000005',master_log_pos=759 命令

相關文章
相關標籤/搜索