mysql主从复制/同步的设置

数据库 itxz 2个月前 (09-22) 45次浏览 0个评论

为什么要做主从复制/主从同步

做主从同步,主要是两点:第一,为了应对在主数据库的访问请求非常大时,可以通过配置一主多从的架构实现读写分离,降低主库的读取压力。第二,在主数据库出现问题时,可将一个从数据库切换为主库继续提供服务而使访问不中断。

为保证从库重启后,仍然知道从哪里开始复制,从库默认会创建两个文件master.info和relay-log.info,分别记录了当前读取主库binlog的进度和SQL线程应用Relay-log的进度。我们可通过show slave status \G命令查看数据库当前复制的状态。

mysql主从复制/同步的设置
主库:

1、在主数据库上设置一个用于复制的账号,并赋予replication slave权限
server-id = 1


>grant replication slave on *.* to 'test'@'192.168.1.16' identified by '123';

>flush privileges;

2、开启主库的Binlog,并设置server-id

server-id = 1
vim /mysql/3306/my.cnf

[mysqld]

log-bin = mysql-bin

3、在主库上设置读锁定有效,目的是确保在此过程中没有对数据的操作,避免主从数据不一致

> flush tables with read lock;

4、获取主库上当前Binlog的日志名和偏移量,为了在从库中,从此位置开始复制

>show master status;

mysql主从复制/同步的设置

5、备份主库的数据

我这里的主从库是在一台服务器上,如果不在一台机器上,先将主库数据打包,到后面再传过去就可以了。这里我将主库的数据备份到了/test目录下(其实可以不用备份,后面直接cp到从库,但还是感受一下备份的安全感吧)

cp /mysql/3306/data /test

6、恢复主库的写操作

> unlock tables;

从库:

7、将第5步中备份的主库数据拷贝到从库上

cp /test /mysql/3307/data

8、从库配置文件中增加server-id,注意这个值是唯一的,要区别于主库和其他从库

vim /mysql/3307/my.cnf

[mysqld]

server-id = 2

9、启动从库

启动从库的时候,我们加一个–skip-slave-start参数,表示这个从库启动是不自动同步,也就是不启动主从复制进程,方便后面对从库的进一步配置

/usr/local/mysql/bin/mysqld_safe --defaults-file=/mysql/3308/my.cnf --skip-slave-start

注意:由于我这里用的是MySQL的多实例,所以启动的时候需要用–defaults-file参数指定一下具体实例的my.cnf文件,如果主从库不再同一台机器上,就不需要加这个参数了,默认是/etc/my.cnf

10、从库设置主从信息

      -> change master to

    -> master_host='192.168.1.16',        #主库服务器的IP

    -> master_port=3306,                  #主库端口

    -> master_user='test',                 #主库用于复制的用户

    -> master_password='123',              #用户密码

    -> master_log_file='mysql-bin.000007',     #主库的Binlog日志名

-> master_log_pos=570;               #Binlog日志的偏移量(从什么位置开始复制)

这里的配置要参照之前在主库的配置

11、从库启动slave线程,并检查

>start slave;

>show processlist \G

如下图:

mysql主从复制/同步的设置

12、测试主从复制

主库上创建一张表,并加入数据,看从库是否复制

主:

>use test

>create table emp (id int,name varchar(11));

>insert into emp values(1,’tom’),(2,’jerry’);

mysql主从复制/同步的设置

然后在从库上查看:

>use test

>show tables;

>select * from emp;

mysql主从复制/同步的设置
可以看到,已经成功复制过去了

13、排错

如果在从库发现没有复制过来数据,先看看slave的状态

>show slave status \G

mysql主从复制/同步的设置
上图中,前面几行是主库的信息,红色框内的两个参数必须要是yes,才能正确复制

Slave_IO_Running表示从库的IO线程,Slave_SQL_running表示从库的SQL线程,两个必须都为yes。

如果为no,可以去从库的错误日志(log-err)中查看原因

到这里,MySQL的异步复制就配置完成了~


IT学者 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql主从复制/同步的设置
喜欢 (0)

您必须 登录 才能发表评论!