目录
概述
mysql主从复制是指服务拥有多台数据库,把数据库分为主库(master)和从库(slave)两部分,从库也可以作为其他库的主库。在mysql运行过程中,主库会把DDL和DML语句等数据库变更的操作记录在一份二进制日志(binlog)中,从库的IOThread(IO线程)会发起一个请求连接主库(master)并读取这一份二进制日志,写到从库中自己的一份中继日志(Relaylog)。而从库中的另一个SQL线程(SqlThread)会读取中继日志中数据的变化进行重做,反映到自身的数据库,从而保证主从数据的一致性。
搭建
-
准备至少2台服务器,为了保证服务器之间正常的连接,需要在防火墙中开放指定的端口号,或者直接关闭防火墙(个人)。
-
修改配置文件,通过`
server-id`
设置mysql
服务的唯一id
,使用read-only
设置读写,主库为0
代表读写,从库为1
代表只读。还可以通过设置指定需要同步的数据库,指定不需要同步的数据库。 -
登录
mysql
创建远程连接的账户,并赋予主从复制的权限。然后可以使用show master status
来查看日志存储在哪个文件的哪个坐标位置。 -
在从库中指定主库的配置,设置主库的ip地址,用户名,密码,
binlog
日志坐标位置以及文件名。 -
在从库中使用
start replica
开启主从复制同步操作。然后可以通过show replica status
查看连接的主库信息。如果Replica_IO_Running
和Replica_Sql_Running
都为Yes
就说明主从同步状态正常。
主从复制的优缺点
优点:
-
数据备份,因为数据备份会把数据库加上全局锁,只允许读,不允许写,主库是用来进行写操作的,从库是用来进行读操作的,我们可以在从库中对数据进行备份,从库依然可以进行写操作,主库依然可以进行写操作。
-
失败迁移,当主库宕机后可以立即使用从库代表成为新的主库,保证服务不会停摆。
-
读写分离,减低单台数据库的读写压力
缺点:
- 使用了多台服务器,成本增加
- 多台服务器之间的维护比单台服务器更加困难