首页 文章 精选 留言 我的

精选列表

搜索[高并发],共10000篇文章
优秀的个人博客,低调大师

Mysql可用复制原理及主从实例测试解析

一、Mysql复制简介 使用mysql复制功能可以将主数据的数据复制到多台从服务器上。默认情况下,采用异步传输方式,数据复制可以在各种不同的网路环境中进行。主从复制技术在企业生产中得到了广泛应用,它避免了数据库的单点故障,当一台服务器宕机,其他服务器一样可以提供稳定可靠的数据服务。 1 mysql 复制原理 Mysql复制功能是将数据分布在多个系统上,这种机制是通过将Mysql的某一台服务器(master)的数据复制到其它服务器(slaves)上来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,从服务器接收到这些更新的日志内容,就按照日志内容在本机执行一遍,由此实现主从数据复制。主服务器写入日志时也维护着文件的一个索引以跟踪日志循环,当一个从服务器连接主服务器时,它通知主从服务器在日志中读取的最后一次成功更新的位置,从服务器接收那个时间点起发生的任何更新,然后封锁并等待主服务器通知新的更新。 2 mysql 复制优点 高性能:通过将请求分配给多台不同的从服务器,提高性能及速度,在此种环境中,所有写操作必须在主服务器进行,读操作可以平均分配给多台从服务器。 数据安全:数据通过主从复制,把主服务器的数据复制的一份或者多份,即实现了数据的安全备份 数据分享:对于大型企业,各个地区的分公司也需要共享总部的数据资源,只需要用主从复制即可实现数据的共享,而且可以仅仅在需要时进行复制。 3 mysql 复制格式 基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。 4 mysql 复制步骤 整体上来说,复制有3个步骤: (1) master将改变记录到二进制日志(binary log)中(二进制日志事件,binary log events); (2) slave将master的binary log events拷贝到它的中继日志(relay log); (3) slave重做中继日志中的事件,将改变反映它自己的数据。 5 主从复制形式 一主一从 主主复制 一主多从---扩展系统读取的性能,因为读是在从库读取的; 多主一从---5.7开始支持 联级复制--- 6半同步复制 5.5版本集成到mysql,以插件的形式存在,需要单独安装 确保事务提交后binlog至少传输到一个从库 不保证从库应用完这个事务的binlog 性能有一定的降低,响应时间会更长 网络异常或从库宕机,卡主主库,直到超时或从库恢复 半同步原理图: 二、Mysql主从复制实例解析 首先了解数据库的主从复制部署注意要点 >>在主服务器上开启二进制日志,并设置唯一的服务器ID编号,设置后重启mysql生效。 >>在所有从服务器上设置唯一服务器ID编号,重启后生效。 >>在主服务器上创建让从服务器读取日志文件的账号,或者使用统一账户。 >>在进行数据复制前,需要记录主服务器上二进制日志的位置标记。 下面对整个主从复制过程详细解析 1 主服务器设置数据复制环境 在已安装或者使用过的数据库上创建数据库和数据表,演示如何对已经存在的数据进行数据同步备份 [root@master ~]# mysql -u root -p mysql> create database hr; mysql>usehr; mysql> create table employees( -> employee_id INT NOT NULL AUTO_INCREMENT, -> name char(20) NOT NULL, -> e_mailvarchar(50), -> PRIMARY KEY(employee_id)); mysql> INSERT INTO employees values ->(1,'TOM','tom@example.com'), ->(2,'Jerry','jerry@example.com'); mysql> exit 在主服务器上开启二进制日志并设置服务器编号,服务器唯一编号必须是1至232-1之间的整数,根据自己的实际情况进行设置。进行这些设置需要关闭MySQL数据库并编辑my.cnf或my.ini文件,并在[mysqld]设置段添加相应的配置选项。 [root@master ~]#vim /etc/my.cnf [mysqld] log-bin=Jacob-bin#启用二进制日志,并设置二进制日志文件前缀 server-id=25 #设置服务器编号 [root@master ~]#service mysqld restart [root@master ~]#service iptables stop 2 从服务器设置数据复制环境 在已安装或者使用过的数据库机器上设置,服务器ID必须设置为集群中唯一编号。对于从服务器而言,二进制日志功能无需开启,当然,根据业务需要也可以开启,比如主主复制中互为主从时需要都开启。 [root@slave ~]#vim /etc/my.cnf [mysqld] server-id=24 [root@slave ~]#service mysqld restart [root@slave ~]#service iptables stop 3 创建数据复制账号 主服务器上必须至少有一个账户供从服务器连接使用。这个账户必须具有REPLICATION SLAVE权限,你可以为不同的从服务器创建不同的账户与密码,也可以使用统一的账户与密码。使用CREATE USER语句创建用户,使用GRANT语句为账户赋权。 [root@master ~]# mysql -u root -p mysql> CREATE USER'slave'@'%'IDENTIFIED BY'123456'; mysql> GRANT REPLICATION SLAVE ON *.* TO'slave'@'%'; mysql> exit 4 读取主服务器二进制日志信息 在进行主从数据复制之前首先查看主服务器的二进制日志文件的基本信息,主服务器二进制文件名称及当前日志记录位置在对从服务器的设置中需要用到。 [root@master ~]# mysql -u root -p mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; +--------------------------------+------------+---------------------+-------------------------+------- | File|Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +--------------------------------+------------+---------------------+-------------------------+------- | jacob-log.000001|1226||| +--------------------------------+------------+---------------------+--------------------------+------ mysql> UNLOCK TABLES; 5 对现有数据库备份并导入从服务器 如果在使用数据复制以前,数据库系统中已经存在数据资源,使用mysqldump工具对这些资料进行数据备份,在主服务器上使用该工具对数据备份后即可在从服务器上进行数据还原操作。当数据达到主从一致后,就可以使用数据复制功能进行自动从此同步操作。 [root@master ~]# mysqldump --all-databases --lock-all-tables > /tmp/dbdump.sql [root@master ~]# scp /tmp/dbdump.sql192.168.1.8:/tmp/ [root@slave ~]# mysql -u root -p < dbdump.sql 6配置从服务器连接主服务器进行数据复制 数据复制的关键操作是配置从服务器去连接主服务器进行数据复制,需要配置从服务器建立网络连接所有必要的信息。使用CHANGE MASTER TO语句即可完成该项工作,MASTER_HOST指定主服务器主机名或IP地址,MASTER_USER为主服务器上创建的拥有复制权限的账户名称,ASTER_PASSWORD为该账户的密码,MASTER_LOG_FILE指定主服务器二进制日志文件名称,MASTER_LOG_POS为主服务器二进制日志当前记录的位置。START SLAVE开启从服务器功能进行主从连接,SHOW SLAVE STATUS查看从服务器状态。 [root@slave ~]# mysql -u root -p mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.1.7', -> MASTER_USER='slave', -> MASTER_PASSWORD='123456', -> MASTER_LOG_FILE='jacob-log.000001', -> MASTER_LOG_POS=1226; mysql> START SLAVE; mysql> SHOW SLAVE STATUS\G; 7 数据同步测试验证 在主数据库上创建数据库及表,然后去从服务器查看是否同步。 [root@master ~]# mysql -u root -p mysql> create database test2; mysql>usetest2; mysql> create table t_table( ->name char(20), -> ageint, -> notevarchar(50)); mysql> INSERT INTO t_table values -> ('linda',23,'Beijing'), -> ('jerry',33,'shanghai'),; mysql> exit [root@slave ~]# mysql -u root -p mysql> select * from test2.t_table; mysql> exit 三、主从复制存在的问题及解决方法 mysql主从复制存在的问题: 主库宕机后,数据可能丢失 从库只有一个sql Thread,主库写压力大,复制很可能延时 解决方法: 半同步复制---解决数据丢失的问题 并行复制----解决从库复制延迟的问题 复制出错处理: 常见:1062(主键冲突),1032(记录不存在) 解决方法: 手动处理 跳过复制错误设置:set global sql_slave_skip_counter=1

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册