mysql主从复制 (基于日志点的复制)

主从复制概念:
这里写图片描述

紫罗兰砢s 

  mysql的复制(replication)是一个异步的复制过程,从master复制到slave的过程,由三个线程完成,其中两个线程(sql线程和I/O线程)在slave端,另一个I/O线程在Master端。
  主服务器把数据变化记录到时二进制日志中,然后从服务器通过在master中的I/O线程读取主服务器上的日志并且把读取到的日志通过从服务器上的I/O线程写入到从服务器的中继日志中,接着sql线程读取中继日志,并且在从服务器上重放(完全顺序执行日志中所记录的各种操作),从而实现Mysql复制。

为会么要用?

如果mysql主服务器的访部量较大,可以通过复制数据,在从服务器
进行查询操作,从而降低主服务器的访问压力,同时从服务器作为主
服务器的备份,可以避免主服务器因为故障导致数据丢失的问题。

mysql复制至少需要两个mysql服务,这些mysql服务可以分布在不同的服务器上,也可以在一台服务器启动多个服务。

show binary logs;

如果报错就代表mysql没有开启二进制。
master修改配置

log-bin
server-id=1

登录master,添加一个复制使用的账户repl,并授于replication slave权限。(常用于建立复制时所需要用到的用户权限,也就是slave server必须被master server授权具有该权限的用户,才能通过该用户复制)
@’ip’或者@‘172.0.0.%’【网段】//%代表所有这个ip段的地址

grant REPLICATION slave on *.* to 'repl'@'172.17.0.%' identified by 'root123'; 

在主服务器上,设置锁定有效,这个操作确保没有数据库操作,以便获得一致性的快照。(这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读。一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行。)
mysql锁参考

flush tables with read lock;

查询master上的进制日志名file和偏移量position,这个操作的目的是为了在从数据库启动以后,从这个点进行数据库的恢复。

show master status;

接下来是备份数据库,我不想备了。。。
备份完成后,解除全局读锁定

unlock tables

接着修改从数据库服务器上的my.cnf,添加一个server-id

log-bin[=paht]#设置log目录,不设就在datadir
server-id=2
relay_log=mysql-relay-bin=PATH#要指定中继日志的文件,因为默认是master的主机名,如果master改变了主机名,就会导至复制失败

要使配置生效要重启。。。
接下来登录到从服务器上,执行以下命令,指定复制使用的用户,master以及开始复制的日志文件和位置。
密码和用户名别搞错了

stop salve;
change master to
master_host='192.168.1.12',
master_user='repl',
master_password='123',
master_log_file='mysql-bin.000029',
master_log_pos=109;

然后

start slave;
show slave status\G;

我第一次会报错要多试几次
然后再从服务器上执行

show processlist \G;

发现出现了一个repl用户的信息。主从同步成功后,我们在主上进行的任何操作,都会同步到从上。
查看从库

 show slave hosts;

如果你的从服务器同时也作为其他服务器的主服务器,搭建一个链式的复制,那么就需要开启这个选项(log-slave-updates),这样他的从服务器才能获取他的二进制日志进行同步操作。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35772366/article/details/79949056
个人分类: mysql
上一篇乐观锁
下一篇mysql主从复制 (指定复制的数库或者表)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭