主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。
因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。
通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
1.2 解决的问题 1.2.1 数据备份从服务器相当于主服务器的一个备份。
1.2.2 高可用主服务器宕机时,可以将从服务器切换为主服务器,保证服务器的稳定运行。
1.2.3 读写分离在主服务器上进行写入和更新,在从服务器上进行查询和分析,提高整个服务器的性能。
1.3 原理主服务器称为Master服务器,从服务器称为Slave服务器。每个Slave只有一个Master,每个Master可以有多个Slave。
当Master上的数据发生改变时,将其改变写入二进制日志中,这个过程称为二进制日志事件。
Slave会在一定时间间隔内对Master上的二进制日志进行探测,若发现日志有改变,则开启I/O线程请求获取Master的二进制事件并保存至Slave的中继日志。
Master会为每个I/O线程启动一个线程,用于发送二进制事件。
Slave将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得Slave的数据和Master的数据保持一致,最后I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒。
MySQL复制是异步的并且是串行化的。
如图:
1.4 配置 1.4.1 配置Master
必选配置:
[mysqld] # 主服务器唯一ID server-id=1 # 是否只读,0表示读写 read-only=0 # 配置二进制日志 log_bin=/var/log/mysql/mysql-bin log_bin_index=/var/log/mysql/mysql-bin
可选配置,二选一:
[mysqld] # 不同步哪些数据库,除此之外别的都同步 binlog-ignore-db = information_schema binlog-ignore-db = mysql # 只同步哪些数据库,除此之外别的都不同步 binlog-do-db = test1.4.2 配置Slave
必选配置:
[mysqld] # 从服务器唯一ID server-id=10 # 是否只读,1表示只读 read-only=1
可选配置:
[mysqld] # 配置二进制日志 log_bin=/var/log/mysql/mysql-bin log_bin_index=/var/log/mysql/mysql-bin # 配置中继日志 relay_log=/var/log/mysql/mysql-relay relay_log_index=/var/log/mysql/mysql-relay1.4.3 重启Master
重新启动Master:
systemctl restart mysql1.4.4 配置用户
在Master上创建用于主从复制的用户:
create user 'doSlave' identified by '123456';
授权:
grant replication slave on *.* to 'doSlave' identified by '123456';
刷新:
flush privileges;1.4.5 查看状态
查看Master的状态:
mysql> show master status; +------------------+----------+--------------+--------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------+-------------------+ | mysql-bin.000009 | 1811 | | information_schema,mysql | | +------------------+----------+--------------+--------------------------+-------------------+ 1 row in set (0.00 sec)
记录下File和Position的值。
1.4.6 重启Slave重新启动Slave:
systemctl restart mysql1.4.7 建立主从关联
在Slave上执行命令:
CHANGE MASTER TO MASTER_HOST='192.168.15.130', MASTER_USER='doSlave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=1811;
说明:
MASTER_HOST:主服务IP地址。 MASTER_USER:主服务上用于主从同步的用户。 MASTER_PASSWORD:主服务上用于主从同步的用户密码。 MASTER_LOG_FILE:主服务上状态查询得到的File。 MASTER_LOG_POS:主服务上状态查询得到的Position。1.4.8 执行同步
在Slave上执行命令:
start slave;
查看同步状态:
show slave statusG;
如果Slave_IO_Running参数和Slave_SQL_Running参数都是Yes,则说明主从同步成功。
1.4.9 测试在Master上执行SQL语句,在Slave上查看是否从Master上同步了。
1.4.10 停止使用命令停止主从同步:
stop slave;2 读写分离
读写分离基于主从复制,可以配置一主一从,主服务器读写,从服务器只读。



