mysql主从复制
主从复制
主从复制是指有两个数据库,它们的角色分别是master和slave。所有数据库操作都在master端进行,slave会自动同步master的操作。
主从复制目的
- 最常见的目的就是备份
- 用于数据挖掘。如果直接从生产数据库中挖掘,会占用数据库资源。
- 数据库读写分离,减少负荷。master和slave同时投入生产,用户所有的写操作在master端进行,所有的读操作在slave端进行。将数据库访问请求分摊,降低负荷。
环境准备
我准备了两台服务器A和B,都是Ubuntu系统。记它们的ip分别是ipA和ipB。master对应A服务器,slave对应B服务器。
Master节点
修改mysql的配置文件my.cnf,增加如下配置,然后重启mysql服务
[mysqld]
#master-slave
server-id=1
log-bin=mysql-bin
binlog-do-db=mstest #要同步的mstest数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名
binlog-ignore-db=mysql #要忽略的数据库
创建slave账号
mysql> GRANT REPLICATION SLAVE ON *.* to 'slave_user'@'ipB' identified by 'password';
#这样就创建了一个用户名为slave_user,密码为password的用户,且只允许该用户的访问来源是localhost或者ipB
完成后,查看master的状态
Slave节点
修改mysql的配置文件my.cnf,增加如下配置,然后重启mysql服务
[mysqld]
#master-slave
server-id=2
配置master的信息,并且启动slave
mysql> change master to master_host='ipA',master_user='slave_user',master_password='password',
master_log_file='mysql-bin.000015',master_log_pos=424;
#注意master_log_file和master_log_pos要对应master状态中的File和Position列
mysql> start slave;
#启动slave
完成后,查看slave的状态,Slave_IO和Slave_SQL的状态必须是yes,否则说明配置失败了
测试
我在A服务器上创建了表test,然后插入两条数据 在B服务器上也能看到
注意
- 最好先在两台服务器上分别手动创建需要同步的数据库,然后再启动slave,否则可能会出问题
- 上述配置是单向的
- 直接在slave数据库中进行写操作,会出问题。我尝试直接在ipB上执行insert语句,然后就不再同步了。也就是之后在ipA上的insert不会同步到ipB上。(这部分我还没弄清楚)