主從複製:2臺以上mysql服務器, 作負載均衡, 主服務器負責增刪改 , 從服務器負責查詢mysql
同步原理:mysql開啓bin-log日誌,主服務器全部的增刪改操做會記錄到bin-log日誌
而後主服務器把bin-log日誌發送 給 從服務器 , 從服務器重放bin-log日誌 確保數據同步sql
配置 my.cnf 文件 並重啓 mysql數據庫
[root@localhost etc]# vim /etc/my.cnf
vim
[root@localhost etc]# service mysql restart
服務器
開啓以後 mysql-bin對應的文件 已經出現負載均衡
[root@localhost var]# cd /usr/local/mysql/var && ll
測試
經過 show master status 命令查看 最新一個binlog日誌 及開始行數spa
mysql> show master status;
線程
查看binlog日誌內容 可見 最新一行日誌在位置1073d
$ /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/var/mysql-bin.000001
測試刪除數據 可見 binlog文件新增日誌內容
flush logs
新建一個binlog日誌 增刪改日誌在新文件中插入 新的日誌end-log-positon 是
107行,107行記錄了mysql內部日誌
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記錄事件
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語句
主服務器查看用戶密碼
mysql> select host,user,password from mysql.user;
添加主服務器用戶密碼
CREATE USER 'kang'@'192.168.206.132' IDENTIFIED BY 'smudge';
建立用戶kang 能夠在ip爲192.168.206.132主機上訪問數據庫
給用戶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
配置以後刷新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 )
使用scp隧道傳輸命令 傳遞文件
scp /home/smudge.sql 192.168.206.132:/home
恢復一部分主服務器備份的數據
新建smudge庫
mysql導入sql文件
[root@localhost ~]# mysql -uroot -psmudge smudge < /home/smudge.sql
配置從服務器my.cnf文件
vim /etc/my.cnf
其中用戶名和密碼就是上述咱們在主服務器添加的信息
(若是你的mysql版本5.1(mysql>status查看)以前的,配置這4項,啓動以後就沒必要使用change master 命令 進行主動同步)
保存並重啓mysql
查看主服務器master binlog 文件
啓動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 查看從服務器狀態
代表同步功能已經開啓
start slave 啓動複製線程
stop slave 中止複製線程
show master logs 查看主數據庫日誌
change master to master_host ,master_user 動態切換主數據庫
show processlist 查看運行進程 (主動服務器都適用)
show slave status 檢查主動狀態
數值爲NO
數值爲NULL
代表同步出現了故障 多是slave服務器執行了寫操做或者從服務器重啓有事務回滾操做
解決
從服務器:
stop slave
關閉複製線程主服務器:
show master status
查看最新二進制文件和位置偏移量從服務器執行:
change master to master_host ...
master_log_file='mysql-bin.000005',master_log_pos=759
命令