Mysql主从复制
- MySQL 主从复制概念
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
- MySQL 主从复制好处
-
可以作为备用数据库进行操作,当主数据库出现故障之后,从数据库可以替代主数据库继续工作,不影响业务流程
-
读写分离,将读和写应用在不同的数据库与服务器上。一般读写的数据库环境配置为,一个写入的数据库,一个或多个读的数据库,各个数据库分别位于不同的服务器上,充分利用服务器性能和数据库性能;当然,其中会涉及到如何保证读写数据库的数据一致,这个就可以利用主从复制技术来完成。
一主一从/一主多从配置
- 设置主机数据库的my.cnf,设置主机标识的service-id
必填项:
server_id=1#主机的标识,每台主机标识不能重复
log-bin=mysql-bin.log#确保可写入的日志文件
可选项:
binlog_format=mixed#二进制日志的格式
binlog-do-db=master#允许主从复制数据库
binlog-ignore-db=mysql#不允许主从复制的数据库
重新启动mysql服务
- 主节点锁表,查询master的状态,挂载从节点后解锁
(1)flush tables with read lock;#(只读,防止positon改变挂载失败)
(2)show master status;#(查看当前bin-log日志的位置点)
(3)unlock tables;
- 挂载从节点
- 填写show master status中master_log_file/master_log_pos
change master to master_host='10.42.124.62',
master_user='root', #不使用root可以单独新建用户
master_password='password',
master_log_file='mysql-bin.000001',
master_log_pos=120;
- 记得启动slave start slave;
- 查看从节点状态
show slave status;
- 当Slave_IO_Running和Slave_SQL_Running线程都为yes是主从复制配置成功
Slave_SQL_Running为no可能是因为 挂载slave之后,master更改了挂载slave之前的内容,此时需要重新挂载
-
挂载多个slave
按挂载第一个从节点操作即可
双机热备配置
即两台主机互为从节点
- 前提要求
-
master必须开启二进制日志
-
master和slave的server-id必须不一样 范围(2^23-1)
-
master和slave的初始数据一致(否则更改挂载点前数据会导致挂载失效)
#扩展说明:有时候,我们只是想master向slave上面同步某一个库,那么就可以使用下面的参数,同样是加在/etc/my.conf配置文件里面:
binlog-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
binlog-ignore-db=不需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
示例:
master的/etc/my.conf
server-id = 1
log-bin=mysql-bin #开启二进制,设定生成的log文件名;
binlog-do-db=demo #需要同步的二进制数据库名;
binlog-ignore-db=information_schema #不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=test
log-slave-update #把更新的记录写到二进制文件中;
slave的/etc/my.conf
server-id = 2 # 如果有多个 依次添加即可,不能相同
log-bin=mysql-bin
relay-log=/data/DB/relay.log #中继日志文件,中继日志是连接mastert和slave的信息,它是复制的核心,I/O线程将来自master的事件存储到中继日志中,中继日志充当缓冲,这样master不必等待slave执行完成就可以发送下一个事件
#如果想要做级联架构,也就是master复制到slave上面,slave再复制到slave2上面,同样在slave上面也可以控制需要复制的数据库,
replicate-ignore-db=mysql
replicate-do-db=demo
log-slave-update # 级联 中级slave必须开启此参数
#MySQL主从复制参数大全 参考:https://www.cnblogs.com/qianniao12/p/8011222.html
- 互相挂载
步骤与一主一从配置相同,互相挂载即可