主从复制:
是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;
主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个:
1) 作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;
2) 可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能;
mysql支持的复制类型:
基于语句复制:主执行什么语句从就执行什么语句
基于行的复制:把改变的内容复制过去,而不是复制语句,数据较为精准
混合类型复制:先语句复制,语句无法执行在执行行数据复制
mysql主从复制工作原理:
1) 事务更新数据完成之前,Master在二进制日志记录这些改变,写进二进制日志后,提交事务
2) Slave将Master的Binary log复制到其中继日志,Slave开启一个I/O线程,I/O线程在Master打开一个普通连接,
然后开始讲Binary log转为存储过程,存储过程从Master的二进制日子中读取事件,
同步完成就进入睡眠并等待Master产生新的事件。
实验环境:
- 系统:CentOS Linux release 7.3.1611 (Core)
- MySQL version:5.7.20
- MySQL Master:10.208.0.10
- MySQL Slave:10.208.0.11
Master配置
# 修改my.cnf文件
server_id=1
#开启binlog日志
log-bin=/data/mysql_binlog/mysql-bin
log-bin_index=/data/mysql_binlog/mysql-bin.index
#需要同步的数据库
binlog-do-db=learn
#不需要同步的数据库,可以设置多个数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#二进制日志自动删除/过期的天数,默认不自动删除
expire_logs_days=7
#重启mysql
/etc/init.d/mysqld restart
#创建个空数据库
mysql -uroot -pbaiyongjie
mysql> create database learn DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#创建slave用户
mysql> grant replication slave, replication client on *.* to 'myslave'@'10.241.0.11' identified by '123456';
mysql> flush privileges;
#查看master状态
mysql> show master status;
+------------------+----------+--------------+---------------------------------------------+-------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+---------------------------------------------+-------------------------------------------+
| mysql-bin.000002 | 4464 | learn | mysql,information_schema,performance_schema | cea1268e-c2c9-11e8-9e7d-00502ab853ae:1-19 |
+------------------+----------+--------------+---------------------------------------------+-------------------------------------------+
Slave配置
# 修改my.cnf文件
server-id = 2
log-slave-updates=true
relay-log = /data/mysql_binlog/relay-log
relay-log-index = /data/mysql_binlog/relay-log.index
#重启mysql
/etc/init.d/mysqld restart
#创建learn数据库
mysql -uroot -pbaiyongjie
mysql> create database learn DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#配置mysql master信息
mysql> change master to master_host='10.241.0.10',master_user='myslave',master_password='123456',master_port=3306,master_log_file='mysql-bin.000002',master_log_pos=4464,master_connect_retry=30;
mysql> start slave;
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.241.0.10
Master_User: myslave
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 4464
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#### 参数注释
Master_Host: 10.241.0.10 //主服务器地址
Master_User: myslave //授权帐户名,尽量避免使用root
Master_Port: 3306 //数据库端口,部分版本没有此行
Read_Master_Log_Pos: 4464 //同步读取二进制日志的位置
Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
效验主从同步功能
#在master节点learn库中创建表并插入数据,查看是否会同步到slave节点
mysql -uroot -pbaiyongjie
mysql> use learn
mysql> CREATE TABLE `edu_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(12) NOT NULL DEFAULT '' COMMENT '账号',
`pwd` varchar(24) NOT NULL DEFAULT '' COMMENT '密码',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户列表';
mysql> INSERT INTO `edu_user` VALUES (1,'baiyongjie','com'),(2,'hmm','123456'),(3,'User','1312132');
#在slave节点查询数据是否通过过来
mysql -uroot -pbaiyongjie
mysql> use learn
mysql> show tables;
+-----------------+
| Tables_in_learn |
+-----------------+
| edu_user |
+-----------------+
mysql> select * from edu_user;
+----+------------+---------+
| Id | userName | pwd |
+----+------------+---------+
| 1 | baiyongjie | com |
| 2 | hmm | 123456 |
| 3 | User | 1312132 |
+----+------------+---------+
#在master节点上在更改一条数据, 看看是否会同步过去
mysql> update edu_user set userName='byj' where Id=1;
Query OK, 1 row affected (0.00 sec)
#到从节点查看
mysql> select * from edu_user;
+----+----------+---------+
| Id | userName | pwd |
+----+----------+---------+
| 1 | byj | com |
| 2 | hmm | 123456 |
| 3 | User | 1312132 |
+----+----------+---------+
网友评论