mysql如何实现主从复制,mysql主从复制的实现方法

准备两台或两台以上的服务器,一台作为主服务器,另外几台作为从服务器,主服务器进行写操作,从服务器进行读操作。
一、主服务器配置

1.关闭防火墙

systemctl stop firewalld

2.关闭selinux

//打开selinux配置文件,把SELINUX的值改成disabled,即SELINUX=disabled,
vi /etc/selinux/config

3.找到主服务器的mysql配置文件my.cnf(我的是在/etc/my.cnf下面),在配置中增加下面两行配置,一个是server-id,一个是log-bin,主服务器的server-id不能跟从服务器的server-id一样,我们可以将主服务器的server-id设置为1。(注意:如果配置文件里已经有server-id和log-bin就不需要再加了)

server-id=1
log-bin=mysql-bin

4.配置好后,重启一下mysql

5.主服务器连接mysql,输入密码进行连接

mysql -uroot -p

6.给从服务器分配用户

//repl是分配给从服务器的用户名(用户名可以自己随便定义),66.42.107.176是从服务器的ip(ip修改成自己的从服务器ip),repl123456是分配给从服务器的密码(密码可以自己随便定义)
grant replication slave on *.* to 'repl'@'66.42.107.176' identified by 'repl123456';

7.查看主服务器状态

show master status

结果如下图:

我们可以看到File这一列的值是mysql-bin.000007,Position这一列的值是2327,这两个值后面配置从服务器的时候会用到。

二、从服务器配置

1.关闭防火墙

systemctl stop firewalld

2.关闭selinux

//打开selinux配置文件,改SELINUX=disabled
vi /etc/selinux/config

3.找到从服务器的mysql配置文件my.cnf(我的是在/etc/my.cnf下面),在配置中增加下面几行配置,server-id设置为2,从服务器的server-id必须和主服务器的server-id不同(注意:如果配置文件里已经有server-id,则不需要再添加server-id,只需要修改server-id为2),replicate-do-db是你需要复制的数据库名(zhiboblog修改成你自己的数据库名,如果想复制所有数据库则不需要设置replicate-do-db这个参数)

server-id = 2
replicate-do-db = zhiboblog

4.配置好后,重启一下mysql
5.从服务器连接mysql,输入密码进行连接

mysql -uroot -p

6.从服务器连接上主服务器(MASTER_HOST是主服务器的ip,MASTER_USER是之前主服务器分配给从服务器的用户名,MASTER_PASSWORD是之前主服务器分配给从服务器的密码,MASTER_LOG_FILE是主服务器show master status显示的File这一列的值,MASTER_LOG_POS是主服务器show master status显示的Position这一列的值)

CHANGE MASTER TO  MASTER_HOST='149.28.80.6', MASTER_USER='repl', MASTER_PASSWORD='repl123456', MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=2327;

7.启动slave

start slave;

8.查看从服务器状态

show slave status\G

结果如下图:

如果Slave_IO_Running和Slave_SQL_Running都是Yes,说明配置成功了。
如果其中有一项不是Yes,则说明配置的有问题。

下面是我遇到的两种错误:
1.Slave_IO_Running是No,错误原因是:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;

使用快照克隆会出现这个问题,解决办法是删除datadir(datadir的路径可以在my.cnf配置文件中查看)里面的auto.cnf,然后重启mysql

2.Slave_IO_Running是No,错误原因是:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;

出现此错误说明主数据库的server-id和从数据库的server-id重复了,从数据库的server-id不能跟主数据库的server-id相同,在mysql的配置文件my.cnf中修改server-id,比如主数据库的server-id是1,从数据库的server-id就不能是1,可以修改成2

mysql搭建主从复制除了上面讲的这种方法,还可以基于GTID去搭建,基于GTID搭建不用管binglog日志的位置,系统会自动寻找未同步的位置进行同步。
mysq基于GTID搭建主从复制的方法:mysq基于GTID搭建主从复制

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: