准备两台或两台以上的服务器,一台作为主服务器,另外几台作为从服务器,主服务器进行写操作,从服务器进行读操作。
一、主服务器配置
1.关闭防火墙
2.关闭selinux
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就不需要再加了)
log-bin=mysql-bin
4.配置好后,重启一下mysql
5.主服务器连接mysql,输入密码进行连接
6.给从服务器分配用户
grant replication slave on *.* to 'repl'@'66.42.107.176' identified by 'repl123456';
7.查看主服务器状态
结果如下图:
我们可以看到File这一列的值是mysql-bin.000007,Position这一列的值是2327,这两个值后面配置从服务器的时候会用到。
二、从服务器配置
1.关闭防火墙
2.关闭selinux
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这个参数)
replicate-do-db = zhiboblog
4.配置好后,重启一下mysql
5.从服务器连接mysql,输入密码进行连接
6.从服务器连接上主服务器(MASTER_HOST是主服务器的ip,MASTER_USER是之前主服务器分配给从服务器的用户名,MASTER_PASSWORD是之前主服务器分配给从服务器的密码,MASTER_LOG_FILE是主服务器show master status显示的File这一列的值,MASTER_LOG_POS是主服务器show master status显示的Position这一列的值)
7.启动slave
8.查看从服务器状态
结果如下图:
如果Slave_IO_Running和Slave_SQL_Running都是Yes,说明配置成功了。
如果其中有一项不是Yes,则说明配置的有问题。
下面是我遇到的两种错误:
1.Slave_IO_Running是No,错误原因是:
使用快照克隆会出现这个问题,解决办法是删除datadir(datadir的路径可以在my.cnf配置文件中查看)里面的auto.cnf,然后重启mysql
2.Slave_IO_Running是No,错误原因是:
出现此错误说明主数据库的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搭建主从复制