linux中mysql的主从复制数据的相关配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/c_xiaomaotou/article/details/82116763

本文主要说的是mysql读写分离中必不可少的一步,就是主从复制,意思是说,当你在主数据库对数据库进行更改后,从数据库跟着修改

1.开启二进制日志

我们需要开启mysql的二进制日志,当主库更新数据时,会记录到该日志中,从库会读取该日志对数据库进行更新

先找到linux下mysql的配置文件在哪,通过which查找目录:

which mysql

得到目录类似:

/usr/bin/mysql

接下来就可以针对这个目录通过一些命令查看配置文件在哪,如下:

/usr/bin/mysql --verbose --help | grep -A 1 'Default options'

然后在下面会出现一些信息比如我的

Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

这个信息的意思是: 
服务器首先读取的是/etc/mysql/my.cnf文件,如果前一个文件不存在则继续读/etc/my.cnf文件,如若还不存在便会去读~/.my.cnf文件

2.在主库中添加一个授权账号,供从库连接:

mysql>GRANT REPLICATION SLAVE ON *.* TO '用户名'@'172.16.15.%' IDENTIFIED BY '密码';

该用户必须具有replication slave 权限,其中172.16.15.%表示允许172.16.15.1~172.16.15.254的ip地址连接,也可以指定ip

执行成功后,刷新命令

flush privileges;

3.修改mysql配置文件:

我的是在/etc/my.cnf中,配置主库,开启二进制日志

vim /etc/my.cnf #进入文件

#在[mysqld]下面添加一下配置

server-id = 1
log-bin = mysql-master
log-bin-index=mysql-master.index

配置后重启数据库

/etc/init.d/mysqld restart

然后我们进入mysql查看一下master的状态

show master status;

可以看到类似如下信息:

+--------------------------+------------+--------------------+-------------------------+---------------------------+

| File                          | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+--------------------------+------------+--------------------+-------------------------+---------------------------+

| master-bin.000001  |     1516  |                          |                               |                                 |

+--------------------------+------------+--------------------+-------------------------+---------------------------+

File: 日志文件名称

Position: 日志所在位置

4.开启从库的二进制日志:

步骤与2一样,这就不重复了,注意server-id一定不要与主库相同

然后我们进入到从库中,执行一下代码:

mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服务器的IP',
>MASTER_USER='master授权的账号',
>MASTER_PASSWORD='master授权的密码',
>MASTER_LOG_FILE='master的日志文件名',
>MASTER_LOG_POS=master的日志所在位置;

master的日志文件名为上面查看master状态的File ,master的日志所在位置为master状态的Position.

5.开启主从复制:

我们在从库中执行命令:

start slave;

然后查看slave的状态

show slave status\G;

我们就可以看到slave库的相关信息了

注意:

Slave_IO_Running: YES 表示slave的日志读取线程开启

Slave_SQL_Running: YES 表示SQL执行线程开启

如果有主从复制有错误信息其实也可以看到

6.测试结果

我们在主库中进行建表,插入更新操作,查看从表是否变动

7.注意

1)开启了主从复制,slave库如果写入数据的话,可能导致数据回滚从而主从复制线程中断,可以通过以下方式解决:

mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

2)如果要停止slave的复制可以使用命令:

stop slave;

到这里整个配置就结束了

参考文章:

1) https://www.cnblogs.com/lay2017/p/9043985.html

2) https://blog.csdn.net/tribalElders/article/details/53895982

猜你喜欢

转载自blog.csdn.net/c_xiaomaotou/article/details/82116763