什么是MySQL Replication?
一、Replication能够实现将数据从一台数据库服务器(master)复制到一台到多台数据库
服务器上(slave)
二、默认状况下,属于异步复制,因此无需维持长链接
MySQL Replication的原理:
简单来讲,master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这
些二进制日志进行数据重演操做,实现数据异步同步。
MySQL Replication的用途:
一、Fail Over 故障切换
二、Backup 在线热备份(机械故障)
三、High Performance 高性能mysql
MySQL Replication的架构:
linux
master ---> slave (双机热备)
默认状况下,master接受读写请求,slave只接受读请求以减轻master的压力
复制的过程:
一、slave端的IO线程连上master端,请求
二、master端返回给slave端,bin log文件名和位置信息
三、IO线程把master端的bin log内容依次写到slave端relay bin log里,并把master端的bin-log文件名和位置记录到master.info里。
四、salve端的sql线程,检测到relay bin log中内容更新,就会解析relay log里更新的内容,并执行这些操做。sql
master ---> slave1 -----> slave2 (级联架构)
优势: 进一步分担读压力
缺点: slave1 出现故障,后面的全部级联slave服务器都会同步失败
数据库
/----> slave1
master
(并联架构)
\----> slave2
优势:解决上面的slave1的单点故障,同时也分担读压力
缺点:间接增长master的压力(传输二进制日志压力)服务器
master1 <------> master2 (互为主从)
优势:
从命名来看,两台master好像都能接受读、写请求,但实际上,每每运做的过程当中,
同一时刻只有其中一台master会接受写请求,另一台接受读请求架构
M—S架构:实现双机热备(AB复制)
一、能够下降master读压力
二、能够对数据库作“热备”,热备只能解决硬件master硬件故障,软件故障等重大
故障问题,但没法解决人为误操做致使的逻辑故障(例如输入错误的SQL语句把重要的记录删除了),因此常规的备份是必须。
环境准备及要求:
一、关闭防火墙和selinux
二、hosts文件中两台服务器主机名和ip地址一一对应起来
三、系统时间须要同步
四、master和slave的数据库版本保持一致
五、master:10.1.1.1 slave:10.1.1.2
具体步骤:
一、修改配置文件(master和slave)
master:
log-bin=/var/lib/mysql/mysqld-bin master必须开启二进制日志
server-id=1 mysql数据库的编号,master和slave必须不同
slave:
log-bin=/mysql56/mysqld-bin slave上的二进制日志能够开启也能够不开启,看具体状况
server-id=2 mysql数据库的编号
relay-log=/mysql56/relay-log 主从复制日志须要开启
二、初始化数据,使两边数据一致。(以master为主)
三、master端建立受权用户
mysql> grant replication slave on *.* to 'slave'@'10.1.1.%' identified by '123';
mysql> flush privileges;
四、查看master的正在写的二进制文件名和位置
mysql> flush tables with read lock; 先加锁,防止两边数据不一致;若是业务还未上线,这个就没有必要了
Query OK, 0 rows affected (0.00 sec)
mysql> show master status; 只有打开二进制日志,这句命令才有结果,表示当前数据库的二进制日志写到什么位置
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 331 | | |
+------------------+----------+--------------+------------------+
二进制文件名 正在写入的位置
五、slave端设定复制信息
mysql> change master to
-> master_host='10.1.1.20', master ip
-> master_user='slave', 同步用户
-> master_password='123', 密码
-> master_port=3306, 端口
-> master_log_file='mysqld-bin.000001', 主上面查到到二进制日志名
-> master_log_pos=331; 主上面查到的位置号
六、启动复制线程,开始同步
mysql> start slave;
mysql> show slave status \G;
Slave_IO_Running: Yes 表明成功链接到master而且下载日志
Slave_SQL_Running: Yes 表明成功执行日志中的SQL语句
回到master端解锁:
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
七、测试验证
master写——>slave能够看到
slave写——>master看不到异步