MySQL(主从复制)

简述:主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的 业务数据库、事务处理库,从库做查询库。

复制过程简单的说就是 master 将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志行数据操作

一、什么是主从复制

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。在最常用的mysql数据库中,支持单向、异步复制。在复制过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器;此时主服务器会将更新信息写入到一个特定的二进制文件中。

并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录并发送到从服务器的更新中去。当一台从服务器连接到主服务器时,从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新。

二、主从复制的作用

  1. 是确保数据安全;做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据的丢失。
  2. 是提升I/O性能;随着日常生产中业务量越来越大,I/O访问频率越来越高,单机无法满足,此时做多库的存储,有效降低磁盘I/O访问的频率,提高了单个设备的I/O性能。
  3. 是读写分离,使数据库能支持更大的并发;在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

三、配置MySQL主从复制

主库(master):

1.修改配置文件 vi /etc/my.cnf

mysqld

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 -- 232-1,默认为1

server-id=1

在作为从库的时候,有写入操作也需要更新二进制日志文件

log-slave-updates

binlog-ignore-db=mysql

开启二进制日志功能

log-bin=mall-mysql-bin

设置二进制日志使用内存大小(事务)

binlog_cache_size=1M

设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed

二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

2.重启MySQL服务器

systemctl restart mysqld

3.登录mysql,创建远程连接的账号,并授予主从复制权限

CREATE USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';

4.通过指令,查看二进制日志坐标

show master status;

字段含义说明:

file: 从哪个日志文件开始推送日志文件

position:从哪个位置开始推送日志

binlog_ignore_db: 指定不需要同步的数据库

从库(slave):

1.修改配置文件 vi /etc/my.cnf

mysqld

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 -- 2^32-1,和主库不一样即可

server-id=2

[可选] 启用中继日志

relay-log=mysql-relay

binlog-ignore-db=mysql

开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用

log-bin=mall-mysql-slave1-bin

设置二进制日志使用内存大小(事务)

binlog_cache_size=1M

设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed

二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7#

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

relay_log配置中继日志

relay_log=mall-mysql-relay-bin

log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1

slave设置为只读(具有super权限的用户除外)

read-only=1

2.重新启动MySQL服务

systemctl restart mysqld

3.登录mysql,设置主库配置(主库先执行后,从库再继续)

stop slave;(停止同步操作)
change master to master_host='192.168.31.135',master_user='slave1',master_password='123456',master_port=3306, master_log_file='mall-mysql-bin.000001', master_log_pos=591,master_connect_retry=30;

master_host:主库的ip地址,master_user:主库用户名,master_password:主库密码,master_port:端口号,master_log_file:二进制日志坐标file,master_log_pos:二进制日志坐标position

reset slave;(重置同步操作)
start slave;(启动同步操作)

5.查看主从同步状态(在从库数据库中执行)

show slave status\G

出现如图所示,出现两个(yes)就代表MySQL主从复制配置好了!!(可以通过增删改查数据库验证一下)

在主库中创建数据库,如下图所示:

在从库中查看数据库,如下图所示:

相关推荐
ladymorgana15 分钟前
【数据库】PostgreSQL 与 MySQL 全方位对比
数据库·mysql·postgresql
张璐月21 分钟前
mysql 散记:innodb引擎和memory引擎对比 sql语句少用函数 事务与长事务
数据库·sql·mysql
noravinsc1 小时前
django queryset 去重
数据库·django·sqlite
望获linux2 小时前
【实时Linux实战系列】硬实时与软实时设计模式
linux·运维·服务器·数据库·操作系统·rtos·嵌入式软件
Cyanto6 小时前
深入MyBatis:CRUD操作与高级查询实战
java·数据库·mybatis
datascome6 小时前
文章发布易优CMS(Eyoucms)网站技巧
数据库·经验分享·爬虫·数据采集·eyoucms·易优cms
有想法的py工程师7 小时前
PostgreSQL 锁等待监控,查找等待中的锁
数据库
学不会就看7 小时前
Django--02模型和管理站点
数据库·oracle·django
←か淡定☆ ヾ8 小时前
SQL Server 2008R2 到 2012 数据库迁移完整指南
数据库·sql server
瀚高PG实验室8 小时前
Arcgis连接HGDB报错
数据库·arcgis·瀚高数据库