上一篇:《第9章-3 复制管理和维护-CSDN博客》,接着了解主从复制,这个面试也会常问。
什么是主从复制
传统数据库中存在的问题
1,传统数据库设计时,如果服务器宕机,将不能为用户提供服务导致整个系统崩溃
2,如果数据库突然宕机.会导致数据丢失
3,为了防止数据丢失,要进行实时备份
冷备份:通过数据库工具进行人为的导出sql.但是手动导出数据可能在中间节点宕机时也会造成数据库的丢失
主从复制
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库
主从复制的作用
1,做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失
2,架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能
3,读写分离,使数据库能支撑更大的并发。
主从复制的原理
1,数据库有个bin-log二进制文件,记录了所有sql语句。
2,我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
3,让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
4,下面的主从配置就是围绕这个原理配置
5,具体需要三个线程来操作:
1,i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
2,主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
3,SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
主从复制实现过程
主机
1,首先修改mysql的配置文件,使其支持二进制日志功能。
打开主服务器的mysql配置文件:my.conf(window保存时, 使用使用ANTIS格式,否则Mysql启动不起来),加入如下代码:
log-bin=C:/ProgramData/MySQL/MySQL Server 5.7/Data/mysql-bin
将mysql二进制日志取名为mysql-bin
server-id=1
为服务器设置一个独一无二的id便于区分
2,在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件
GRANT replication slave ON *.* TO 'myxq'@'192.168.0.89'
IDENTIFIED BY '123456';
FLUSH PRIVILEGES
3,查看主服务器BIN日志的信息
执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作, 因为每次操作数据库时这两值会发生改变
show master status;
mysql-bin.000003
612
从机
进入从机修改配置文件
vim /etc/my.cnf
log-bin=mysql-bin
server-id=2
保存修改 重启服务
启动mysql服务
systemctl start mysqld.service
停止mysql服务
systemctl stop mysqld.service
在从机mysql中执行以下语句
CHANGE MASTER TO MASTER_HOST='192.168.31.156',
MASTER_USER='myxq',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=612;
参数解释
MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
先在从服务器配置完成,启动从服务器:
start slave;
查看是否配置成功:
show slave status;
停止服务复制
stop slave
主从复制脚本
MASTER脚本
#'slave'@'192.168.31.156'sq
#slave 是用户名 后面 slave 是密码
#192.168.31.156 是允许访问的远程IP地址,这里要写从属服务器的IP
#因为演示环境实在本机访问,因此都是192.168.31.156,生产环境要改为其他IP
create user 'slave'@'192.168.31.156' IDENTIFIED by 'slave';
create user 'slave1'@'192.168.31.157' IDENTIFIED by 'slave';
#为slave用户授予主从复制的权限
grant replication slave on *.* to 'slave'@'192.168.31.156';
#激活权限
flush PRIVILEGES;
show master status;
show binlog events in 'mysql-bin.000001';
SLAVE脚本
CHANGE MASTER TO
MASTER_HOST='192.168.31.156',
MASTER_PORT=3310,
MASTER_USER='slave',
MASTER_PASSWORD='slave',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=951;
#开始主从复制
start slave;
show slave status;
总结:
了解主从复制的原理:数据库有个bin-log二进制文件,记录了所有sql语句;把主数据库的bin-log文件的sql语句复制过来,在从数据的relay-log重做日志文件中再执行一次这些sql语句。
上一篇:《第9章-3 复制管理和维护》
下一篇:《第10章-1 备份与恢复》