主从复制

传统数据库设计时

如果服务器宕机,将不能为用户提供服务导致整个系统崩溃

如果数据库突然宕机,会导致数据的丢失

为了防止数据的丢失,要实时进行备份

冷备份:通过数据库工具进行人为的导出sql,但是手动导出数据可能在中间节点宕机时也会造成数据的损失

建立一个和主数据库完全一样的数据环境,成为从数据库

主从复制的作用

1,做数据的热备份,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失

2.架构的扩展,业务量越来越大,i/o访问频率过高,单机无法满足,次数做多库的存储,降低磁盘I/O的访问频率,提高单个机器I/O的性能

3.读写分离,使数据库能支持更大的并发

原理

数据库有个bin-log二进制文件,记录了所有sql语句,我们的目标就是把主数据库的bin-log文件的sql语句复制过来.让其在从数据库的relay-log重做日志文件中再执行一次这些sql即可.

具体操作

  • i/o线程去请求主库的binlog,并将得到的binlog日志写到relay log(中继日志)文件中
  • 主库会生成一个log dump线程,用来给从库i/o线程传binlog
  • sql线程,会读取relay log文件中的日志,并解析成具体操作,我来实现主从的操作一致,而最终数据一致

实现

主机(windows)

手先修改myssql的配置文件,使其支持二进制日志的功能

打开mysql目录下的my.ini

log-bin=mysql-bin
server-id=1

在主服务器上位从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙才能到主服务器上来共享服务器的日志文件

grant replication slave on *.* to 'myxq'@'192.168.50.132' IDENTIFIED by '123123';
flush PRIVILEGES;#刷新

查看主服务器bin日志的信息

执行完之后记录下这俩个值,然后在配置完从服务器之前不要对主服务器进行任何操作

有误每次操作数据库时这俩值会发生改变

show master status;

输出以下结果

FilepositionBin_Do_DBBinlog_lgnore_DBExecuted_gtid_Set
mysql-bin.000002610

从(linux)

vim /etc/my.cnf
#最后加上
log-bin=mysql-bin
server-id=2

systemctl stop mysqlid.service #停止服务
systemctl start mysqlid.service #启动服务

在从机中执行以下sql语句

change master to MASTER_HOST='192.168.50.92',
MASTER_USER='myxq',
MASTER_PASSWORD='123123',
Master_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=610;

开启从服务器

start slave;

show slave status \G;#查看是否成功

如果

Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

这俩个都是yes的情况下就表示完成了

stop slave #可以停止复制
Last modification:November 17, 2023
如果觉得我的文章对你有用,请随意赞赏