主从复制概念:
紫罗兰砢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),这样他的从服务器才能获取他的二进制日志进行同步操作。