MySQL主从介绍、准备工作、配置主、配置从、测试主从同步、断电后恢复主从...
MySQL主從介紹
????MySQL主從又叫做Replication、AB復制。簡單講就是A和B兩臺機器做主從后,在A上寫數(shù)據(jù),另外一臺B也會跟著寫數(shù)據(jù),兩者數(shù)據(jù)實時同步。MySQL主從是基于binlog的,主上須開啟binlog才能進行主從。
主從過程:
需要保持數(shù)據(jù)的一致性,才能復制數(shù)據(jù)
1、主服務器將更改操作記錄到binlog中
2、從服務器將主服務器的binlog事件(SQL語句)同步到本機(從服務器)并記錄在relaylog(中繼日志)中
3、從服務器根據(jù)relaylog里面的SQL語句按順序執(zhí)行
說明: 該過程有三個線程,主上有一個log dump線程,用來和從的i/o線程傳輸binlog;從上有兩個線程,其中i/o線程用來同步主的binlog并生成relaylog,另外一個SQL線程用來把relaylog里面的SQL語句執(zhí)行。
應用的場景:
1、備份重要的數(shù)據(jù)
2、分擔主庫服務器的讀的壓力,讓從服務器讀,主服務器寫操作
準備工作
主服務器:192.168.3.74? 安裝mysql5.6
從服務器:192.168.3.83? ?安裝mysql5.6
配置主
1、[root@centos7 system]# vi /etc/my.cnf
[mysqld]
server-id=132
log_bin=jacklinux
2、重啟:
[root@centos7 system]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!?
Starting MySQL.. SUCCESS!?
[root@centos7 system]# ls -lt /data/mysql/? #二進制文件,不能查看
-rw-rw---- 1 mysql mysql? ? ? ?19 Nov 22 09:33 jacklinux.index? ??
-rw-rw---- 1 mysql mysql? ? ? 120 Nov 22 09:33 jacklinux.000001
3、新建一個數(shù)據(jù)庫為試驗做準備:
[root@centos7 mysql]# mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql
[root@centos7 mysql]# mysql -uroot -p123456 -e "create database jacktest"
[root@centos7 mysql]# mysql -uroot -p123456 jacktest < /tmp/zrlog.sql
4、創(chuàng)建同步賬號
mysql>? grant replication slave on *.* to 'repl'@'192.168.3.83' identified by '123456';
#只給復制權限,對所有庫所有表,ip為從服務器的ip,賬號為repl,密碼:123456
Query OK, 0 rows affected (0.00 sec)
mysql> flush tables with read lock;
#先進行鎖表,等主從服務器數(shù)據(jù)保持一致,再解鎖表
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File? ? ? ? ? ? ?| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| jacklinux.000001 |? ? 10989 |? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ?|
+------------------+----------+--------------+------------------+-------------------+
#需要記錄file、position位置
配置從
1、[root@test ~]# vim /etc/my.cnf
[mysqld]
server-id=130
#必須得和主服務器上的server-id不一樣
2、[root@test ~]# scp 192.168.3.74:/tmp/*.sql .
3、mysql> create database zrlog;
4、恢復數(shù)據(jù)庫
[root@test ~]# mysql -uroot zrlog < zrlog.sql
實現(xiàn)主從同步:
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='192.168.3.74',master_user='repl',master_password='123456',master_log_file='jacklinux.000001',master_log_pos=10989;
#master_log_file、master_log_pos:主服務器上
mysql> start slave;
mysql> show slave status\G
? ?Slave_IO_Running: Yes
? ?Slave_SQL_Running: Yes
5、解鎖主庫的表(在主上操作):
mysql> unlock tables;
此時主從復制搭建完成,下一步驗證。
測試主從同步
主服務器:
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=? 忽略
驗證:
主服務器上創(chuàng)建表zrtest,并插入數(shù)據(jù)
mysql> use zrlog
mysql> create table zrtest(id int);
Query OK, 0 rows affected (0.02 sec)
mysql> desc zrtest;
+-------+---------+------+-----+---------+-------+
| Field | Type? ? | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id? ? | int(11) | YES? |? ? ?| NULL? ? |? ? ? ?|
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> insert zrtest value(1);
Query OK, 1 row affected (0.01 sec)
mysql> insert zrtest value(20);
Query OK, 1 row affected (0.00 sec)
mysql> select * from zrtest;
+------+
| id? ?|
+------+
|? ? 1 |
|? ?20 |
+------+
從服務器上查看是否有zrtest表,還有數(shù)據(jù)
mysql> use zrlog;
mysql> select * from zrtest;
+------+
| id? ?|
+------+
|? ? 1 |
|? ?20 |
+------+
驗證完成,可以同步
主數(shù)據(jù)庫服務器上:
1、鎖表:
mysql> flush tables with read lock;
2、等還原后記得解鎖
mysql>? unlock tables;
斷電后導致主從不一致,需要重新連接,此操作不用停服務或者鎖表
準備操作:
1、需要開啟gtid
[root@centos7 db_bk]# vi /etc/my.cnf
[mysqld]
server-id=133
binlog_format=mixed
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
2、重啟mysqld,再表里插入幾行數(shù)據(jù)
3、查看:
show global variables like '%gtid%'
從服務器上:
1、vi /etc/my.cnf
[mysqld]
server-id=130
log_bin=jacklinux
binlog_format=mixed
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
2、重啟mysqld
操作:
1.安裝innobackupex
? yum install?http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
? yum list | grep percona
? yum install percona-xtrabackup
2.數(shù)據(jù)庫配置寫下用戶名密碼
操作:
1、備份源數(shù)據(jù)庫
[root@centos7 ~]# innobackupex --socket=/tmp/mysql.sock /data/db_bk/
2、查看目錄
3、應用日志,使數(shù)據(jù)文件保持一致
[root@centos7 ~]# innobackupex --apply-log /data/db_bk/2018-01-03_16-39-52/
4、拷貝數(shù)據(jù)
[root@centos7 db_bk]# cd /data/db_bk/
[root@centos7 db_bk]# scp -r 2018-01-03_16-39-52/ root@192.168.3.83:/data
從數(shù)據(jù)庫服務器上
停止數(shù)據(jù)庫服務?
[root@test data]# /etc/init.d/mysqld stop
清空文件夾數(shù)據(jù)
[root@test mysql]# rm -rf /var/lib/mysql/*
恢復數(shù)據(jù)
[root@test mysql]# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/2018-01-03_16-39-52/
改權限,并啟動數(shù)據(jù)庫
[root@test mysql]# chown -R mysql.mysql /var/lib/mysql
/etc/init.d/mysqld start
主數(shù)據(jù)庫服務器上
查看master的gtid位置:
[root@centos7 db_bk]# cat /data/db_bk/2018-01-03_16-39-52/xtrabackup_binlog_info?
jacklinux.000014127744e9aeff-c530-11e7-9e06-0050562d75e7:1-4
從數(shù)據(jù)庫服務器上
連接slave,設置跳過的日志文件
mysql
mysql> set global gtid_purged='44e9aeff-c530-11e7-9e06-0050562d75e7:1-4';
mysql> change master to master_host='192.168.3.74',master_user='repl',master_password='123456',master_port=3306,master_auto_position=1;
啟動從庫配置
> start slave;
查看狀態(tài)
> show slave status\G;
報錯:Slave_IO_Running: No
解決:查了很久,原來是我的change master to master_host='192.168.3.83',master_user='repl',master_password='123456',master_port=3306,master_auto_position=1;中的master_host寫成本機了,應該是192.168.3.74
記得解鎖
mysql>? unlock tables;
本文轉(zhuǎn)自 iekegz 51CTO博客,原文鏈接:http://blog.51cto.com/jacksoner/1983983,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結
以上是生活随笔為你收集整理的MySQL主从介绍、准备工作、配置主、配置从、测试主从同步、断电后恢复主从...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows Phone 7 位图编程
- 下一篇: 学习dubbo(二): 第1个例子