数据库学习--主从复制

在实际生产环境中,单台mysql数据库是完全不能满足实际需求,无论安全,高可用性,高并发等各个方面的要求。mysql主从复制是满足这些要求的基础,主要用于实时备份,高可用,读写分离的场景

原理

  • master服务器将数据的改变记录二进制日志,当master上的数据发生改变时,则将其改变写入二进制日志中。
  • salve服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件
  • 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,从节点保存至中继日志。
  • 从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致。
  • 最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。

过程

基本要求

  • 两台服务器
  • 两台服务器版本一致(主节点低于从节点)
  • 两台服务器防火墙关闭
  • 双方数据库用户的用户,要具有远程访问的权限【参考远程】

主服务器

修改主服务器的mysql配置文件 (wind:my.ini,linux(my.cnf)),放在mysqld下面

[mysqld]
有重复的选项,将设置的字段保证不会被覆盖
#mysql唯一id
server-id = 1
#二进制日志文件,此项为必填项,否则不能同步数据;
log-bin = "mysql-bin"
#指定二进制错误文件
log-error="mysql-error"
#需要同步的数据库,如果需要同步多个数据库;
binlog-do-db = 库名
#binlog-do-db = 库名
#binlog-do-db = 库名
#不需要同步的数据库
binlog-ignore-db = mysql

给从数据库授权

8.0版本以下

GRANT REPLICATION SLAVE ON *.* to 'root'@'172.16.168.142' identified     by '123456';

8.0版本

CREATE USER 'root'@'192.168.43.152' IDENTIFIED WITH
mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.43.152';

最后几步

#刷新权限
flush privileges;
#重启服务
service mysql restart;重启 (linux上: /etc/init.d/mysql restart)
#查询二进制信息
show master status 查询主服务器二进制信息

从服务器配置

[mysqld]
server-id=2    #默认是1改成2
log-bin="mysql-bin"    #这行本身有
replicate-do-db=uek_demo    #需要同步的数据库
replicate-ignore-db=mysql    #不同步系统数据库
read_only     #设只读权限,一般不写

重启mysql服务

执行同步sql语句

[mysqld]
change master to
master_host='主机域名'
master_user='root'
master_password='密码'
master_log_first='主服务器的二进制地址'
master_log_pos='主服务器的pos'

#实例
change master to master_host='192.168.43.192',master_user='root',master_password='lz1022',master_log_file='mysql-bin.000008',master_log_pos=154;

开启同步

start slave

判断是否成功

show slave status\G;
i/o    sql值是否为yes

没有表/库,手动创建***

其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常

猜你喜欢

转载自blog.csdn.net/qq_43320162/article/details/85322325
今日推荐