linuxcentos下mysql数据库的主从复制环境搭建_MySQL

有两台mysql数据库服务器masterslave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。

原理图如下:

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

简单来说,mysql的主从复制的原理就是slave把master上面执行的 update,insert这些会使数据发生改变的sql语句从master上面同步过来,然后在自己的机器上再执行一遍,那么这两台数据库服务器上的数据就一模一样了,而那些要同步的sql语句就存在bin-log文件里面

我这里有两台机器分别是192.168.1.6(master) 192.168.1.5(slave)

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

我们先从master机器开始配置

修改/etc/my.cnf 文件(mysql启动默认是从/etc/my.cnf读取的,所以你别的地方有配置文件的话建议直接移到/etc目录下)

 

[client]port = 3306socket = /usr/local/mysql/mysql.sock[mysqld]character-set-server = utf8collation-server = utf8_general_ciskip-external-lockingskip-name-resolveuser = mysqlport = 3306basedir = /usr/local/mysqldatadir = /home/mysql/datatmpdir = /home/mysql/temp# server_id = .....socket = /usr/local/mysql/mysql.socklog-error = /home/mysql/logs/mysql_error.logpid-file = /home/mysql/mysql.pidopen_files_limit = 10240back_log = 600max_connections=500max_connect_errors = 6000wait_timeout=605800#open_tables = 600#table_cache = 650#opened_tables = 630max_allowed_packet = 32Msort_buffer_size = 4Mjoin_buffer_size = 4Mthread_cache_size = 300query_cache_type = 1query_cache_size = 256Mquery_cache_limit = 2Mquery_cache_min_res_unit = 16ktmp_table_size = 256Mmax_heap_table_size = 256Mkey_buffer_size = 256Mread_buffer_size = 1Mread_rnd_buffer_size = 16Mbulk_insert_buffer_size = 64Mlower_case_table_names=1default-storage-engine = INNODBinnodb_buffer_pool_size = 2Ginnodb_log_buffer_size = 32Minnodb_log_file_size = 128Minnodb_flush_method = O_DIRECT#####################thread_concurrency = 32long_query_time= 2slow-query-log = onslow-query-log-file = /home/mysql/logs/mysql-slow.log  ## replicationserver_id=6binlog-ignore-db=mysqllog-bin=master-mysql-binbinlog_cache_size=1Mbinlog_format=mixedexpire_logs_days=7slave_skip_errors=1062[mysqldump]quickmax_allowed_packet = 32M[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

这里主要的配置就是和复制相关的这段配置,其它配置是mysql源码安装时配置,里面具体参数代表什么意思可以网上搜一下,文档很多的

 

 

## replicationserver_id=6binlog-ignore-db=mysqllog-bin=master-mysql-binbinlog_cache_size=1Mbinlog_format=mixedexpire_logs_days=7slave_skip_errors=1062

我简单解释一下,复制有关的参数

 

serverid 全局唯一的

binlog-ignore-db=mysql复制过滤,我们不同步mysql系统自带的数据库

log-bin=master-mysql-bin 开启logbin功能并设置logbin文件的名称

binlog_format=mixed 混合型复制模式,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

接下来重启mysql服务并用客户端登录

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

slave想要同步master上的数据首先肯定需要权限,所以我们要在master上面开通权限

 

grant replication slave, replication client on *.* to 'root'@'192.168.1.5' identified by'root';

账号和密码都是root ,允许192.168.1.5这台机器向master发送同步请求,当然你可以设成别的,我这里只是为了方便记忆,设了太多不同的密码容易忘记

 

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

刷新一下授权信息,然后查看当前master的状态

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

show master status,我这里解释一下,我们知道关于对数据库修改的sql全部记录在了bin-log里面,那么我们就每次都把bin-log里面的sql全部执行一遍?肯定不是,我们肯定要记录我上次复制到哪儿里了,然后我下次再从这个点开始同步,就像我们玩单机游戏闯了3关以后要存下档一样,下次玩我们继续从第三关开始玩,这是一个意思。

接下来我们随便写点测试数据到数据库里面去

 

create database if not exists pcx default charset utf8 collate utf8_general_ci;use pcx;DROP TABLE IF EXISTS `fruits`;CREATE TABLE fruits(f_id    char(10)     NOT NULL,s_id    INT        NOT NULL,f_name  char(255)  NOT NULL,f_price decimal(8,2)  NOT NULL,PRIMARY KEY(f_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 ;INSERT INTO fruits (f_id, s_id, f_name, f_price)     VALUES('a1', 101,'apple',5.2),     ('b1',101,'blackberry', 10.2),     ('bs1',102,'orange', 11.2),     ('bs2',105,'melon',8.2),     ('t1',102,'banana', 10.3),     ('t2',102,'grape', 5.3),     ('o2',103,'coconut', 9.2),     ('c0',101,'cherry', 3.2),     ('a2',103, 'apricot',2.2),     ('l2',104,'lemon', 6.4),     ('b2',104,'berry', 7.6),     ('m1',106,'mango', 15.6),     ('m2',105,'xbabay', 2.6),     ('t4',107,'xbababa', 3.6),     ('m3',105,'xxtt', 11.6),     ('b5',107,'xxxx', 3.6);

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

 

接下来我们把pcx这个库下的数据全部备份下来

首先我们要锁表

 

flush tables with read lock;

接下来用mysql的备份命令进行备份

 

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

最后我们把edu-master.sql发送到slave的机器上面

好了,我们接下来开始配置slave(192.168.1.5)

同样打开my.cnf文件开始配置

 

vi /etc/my.cnf

 

 

[client]port = 3306socket = /usr/local/mysql/mysql.sock[mysqld]character-set-server = utf8collation-server = utf8_general_ciskip-external-lockingskip-name-resolveuser = mysqlport = 3306basedir = /usr/local/mysqldatadir = /home/mysql/datatmpdir = /home/mysql/temp# server_id = .....socket = /usr/local/mysql/mysql.socklog-error = /home/mysql/logs/mysql_error.logpid-file = /home/mysql/mysql.pidopen_files_limit = 10240back_log = 600max_connections=500max_connect_errors = 6000wait_timeout=605800#open_tables = 600#table_cache = 650#opened_tables = 630max_allowed_packet = 32Msort_buffer_size = 4Mjoin_buffer_size = 4Mthread_cache_size = 300query_cache_type = 1query_cache_size = 256Mquery_cache_limit = 2Mquery_cache_min_res_unit = 16ktmp_table_size = 256Mmax_heap_table_size = 256Mkey_buffer_size = 256Mread_buffer_size = 1Mread_rnd_buffer_size = 16Mbulk_insert_buffer_size = 64Mlower_case_table_names=1default-storage-engine = INNODBinnodb_buffer_pool_size = 2Ginnodb_log_buffer_size = 32Minnodb_log_file_size = 128Minnodb_flush_method = O_DIRECT#####################thread_concurrency = 32long_query_time= 2slow-query-log = onslow-query-log-file = /home/mysql/logs/mysql-slow.log  ## replicationserver_id=5binlog-ignore-db=mysqllog-bin=mysql-slave-binbinlog_cache_size = 1Mbinlog_format=mixedexpire_logs_days=7slave_skip_errors=1062relay_log=mysql-relay-binlog_slave_updates=1read_only=1[mysqldump]quickmax_allowed_packet = 32M[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

配置文件和master的差不多,主要差别在一下几点

 

log-bin=mysql-slave-bin开启了二进制日志,实际上不开也没关系,因为我们这个slave只是做slave,如果你这台slave还有可能要做别人的master的话那么必须开启

relay_log=mysql-relay-bin配置中继日志,用来存放从master的bin-log那边同步来的数据

Reclaim.ai Reclaim.ai

为优先事项创建完美的时间表

Reclaim.ai 90 查看详情 Reclaim.ai

配置好后重启数据库服务

 

service mysql restart

我们首先要创建一下数据库,因为我们备份下来的数据库文件里面是不包含创建数据库的命令的,所以我们要手动创建一下

 

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

把我们从master那边备份过来的数据恢复到slave中

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

登录 Slave 数据库

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

在mysql客户端中输入一下命令连接master

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

change master to ,
master_host=’192.168.1.6′ master主机的ip地址

master_user=’root’,

master_password=’root’, 我们刚刚在master有执行过授权的账号密码就是这个

master_port=3306,master数据库的端口号

master_log_file=’edu-mysql-bin.000002′,

master_log_pos=427, 这个是我们通过show master status看到的position

 

master_connect_retry=30;

 

使用命令查看slave状态,我们可以看到slave目前还未开始同步

 

 show slave status\G;

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

 

开始主从同步,主要看到两个yes就代表同步成功了

 

start slave;

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

 

在master机器上查看状态,可以看见slave的连接信息

 

show processlist\G;

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

 

接下来我们测试一下主从复制的功能

master 上原来的数据

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

这是我插入的记录

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

我们到slave上面看看有没有,有就代表成功了

linuxcentos下mysql数据库的主从复制环境搭建_MySQL

至此mysql原生支持的主从复制搭建完毕,当然我们说mysql的主从复制

性能上回有延迟,master上的数据不是无延迟的同步到slave上面,所以如果你对数据的一致性要求非常高的话,那么mysql官方的主从复制就不合适了,可以考虑用别的数据同步方案例如“Galera Cluster for MySQL” ,当然也有人说mysql官方支持的主从复制只是适合在中小规模的集群下运行。

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1042928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 05:11:32
下一篇 2025年12月2日 05:11:53

相关推荐

  • Pboot插件数据库连接的配置教程_Pboot插件数据库备份的自动化脚本

    首先配置PbootCMS数据库连接参数,确保插件正常访问;接着创建auto_backup.php脚本实现备份功能;然后通过Windows任务计划程序或Linux Cron定时执行该脚本,完成自动化备份流程。 如果您正在开发或维护一个基于PbootCMS的网站,并希望实现插件对数据库的连接配置以及自动…

    2025年12月6日 软件教程
    000
  • 环境搭建docker环境下如何快速部署mysql集群

    使用Docker Compose部署MySQL主从集群,通过配置文件设置server-id和binlog,编写docker-compose.yml定义主从服务并组网,启动后创建复制用户并配置主从连接,最后验证数据同步是否正常。 在Docker环境下快速部署MySQL集群,关键在于合理使用Docker…

    2025年12月6日 数据库
    000
  • 如何在mysql中分析索引未命中问题

    答案是通过EXPLAIN分析执行计划,检查索引使用情况,优化WHERE条件写法,避免索引失效,结合慢查询日志定位问题SQL,并根据查询模式合理设计索引。 当 MySQL 查询性能下降,很可能是索引未命中导致的。要分析这类问题,核心是理解查询执行计划、检查索引设计是否合理,并结合实际数据访问模式进行优…

    2025年12月6日 数据库
    000
  • 如何在mysql中安装mysql插件扩展

    安装MySQL插件需先确认插件文件位于plugin_dir目录,使用INSTALL PLUGIN命令加载,如INSTALL PLUGIN keyring_file SONAME ‘keyring_file.so’,并确保用户有SUPER权限,最后通过SHOW PLUGINS验…

    2025年12月6日 数据库
    000
  • php查询代码怎么写_php数据库查询语句编写技巧与实例

    在PHP中进行数据库查询,最常用的方式是使用MySQLi或PDO扩展连接MySQL数据库。下面介绍基本的查询代码写法、编写技巧以及实用示例,帮助你高效安全地操作数据库。 1. 使用MySQLi进行查询(面向对象方式) 这是较为推荐的方式,适合大多数中小型项目。 // 创建连接$host = ‘loc…

    2025年12月6日 后端开发
    000
  • 如何在mysql中定期清理过期备份文件

    通过Shell脚本结合cron定时任务实现MySQL过期备份文件自动清理,首先统一备份命名格式(如backup_20250405.sql)并存放在指定目录(/data/backup/mysql),然后编写脚本使用find命令删除7天前的.sql文件,配置每日凌晨2点执行的cron任务,并加入日志记录…

    2025年12月6日 数据库
    000
  • php数据库如何实现数据缓存 php数据库减少查询压力的方案

    答案:PHP结合Redis等内存缓存系统可显著提升Web应用性能。通过将用户信息、热门数据等写入内存缓存并设置TTL,先查缓存未命中再查数据库,减少数据库压力;配合OPcache提升脚本执行效率,文件缓存适用于小型项目,数据库缓冲池优化和读写分离进一步提升性能,推荐Redis为主并防范缓存穿透与雪崩…

    2025年12月6日 后端开发
    000
  • 如何在mysql中使用角色组合优化权限管理

    答案:MySQL角色通过封装权限实现集中管理。创建如app_reader等角色并授予权限,再分配给用户alice并设默认角色,支持组合使用,定期审计并通过系统视图查看,提升安全与运维效率。 在MySQL中,角色(Role)是一种强大的权限管理工具,能够简化用户权限的分配与维护。通过创建角色并将其赋予…

    2025年12月6日 数据库
    000
  • 如何在mysql中使用索引提高查询效率

    合理创建索引可显著提升MySQL查询效率,应优先为WHERE、JOIN、ORDER BY等高频字段建立B-Tree复合索引,如CREATE INDEX idx_status_created ON users(status, created_at, id),并遵循最左前缀原则;避免在索引列使用函数或前…

    2025年12月6日 数据库
    000
  • mysql如何备份存储过程和函数

    最直接且推荐的方式是使用mysqldump工具并添加–routines参数,可完整导出存储过程和函数;若需跨版本迁移,应结合–triggers、处理DEFINER用户、验证SQL_MODE,并在测试环境充分验证恢复与兼容性。 MySQL备份存储过程和函数,最直接且推荐的方式是…

    2025年12月6日 数据库
    000
  • MySQL模糊查询:高效处理含空格和多格式电话号码

    在mysql数据库中,当电话号码字段包含多种格式和空格时,传统的`like`查询可能无法返回预期结果。本文将介绍如何利用`replace`函数在查询时动态移除电话号码中的空格,从而实现准确的模糊匹配。同时,我们还将探讨性能考量及数据标准化等最佳实践,帮助您优化数据库查询和数据质量。 挑战:含空格电话…

    2025年12月6日 后端开发
    000
  • 在Laravel中处理JSON字段并计算每行总和的教程

    本教程旨在指导如何在laravel应用中处理存储为json字符串的数据库字段。我们将通过一个具体示例,展示如何从json字段中提取数值并计算每条记录的总和,并探讨如何通过控制器逻辑和laravel模型访问器实现这一功能,以提高代码的可读性和维护性。 场景描述 在现代Web应用开发中,有时我们需要在数…

    2025年12月6日 后端开发
    000
  • mysql如何设置事务隔离级别

    MySQL支持四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE,分别用于控制脏读、不可重复读和幻读问题。默认隔离级别为REPEATABLE READ。可通过SELECT @@transaction_isolat…

    2025年12月6日 数据库
    000
  • 如何在mysql中安装mysql客户端命令行

    答案是安装MySQL客户端的方法因操作系统而异。首先通过mysql –version确认是否已安装,若未安装,则在Ubuntu/Debian系统使用sudo apt install mysql-client,在CentOS/RHEL/Fedora系统使用sudo yum或dnf inst…

    2025年12月6日 数据库
    000
  • mysql中如何排查事务死锁

    首先通过SHOW ENGINE INNODB STATUS查看最近死锁信息,分析事务加锁顺序和SQL语句,定位循环等待原因;再启用innodb_print_all_deadlocks记录所有死锁至错误日志;常见死锁原因为加锁顺序不一致、间隙锁冲突、无索引扫描及长事务;建议统一加锁顺序、添加索引、缩短…

    2025年12月6日 数据库
    000
  • 如何在Laravel中计算JSON字符串字段中各值的总和

    本教程将指导您如何在laravel应用中,从数据库中存储的json字符串字段(例如element_degree)中提取并计算每个记录(如用户)内所有键值对中数值的总和。通过遍历模型集合、解码json数据并累加其内部数值,您可以轻松地为每条记录生成一个聚合总和。 在现代Web开发中,我们经常需要在数据…

    2025年12月6日 后端开发
    000
  • 如何在mysql中排查权限不足导致的错误

    答案是权限配置不当导致MySQL访问被拒。需检查用户是否存在、密码是否正确、权限是否覆盖当前主机和数据库,并通过SHOW GRANTS确认授权,必要时创建用户并授予对应权限,最后执行FLUSH PRIVILEGES生效。 当在 MySQL 中遇到权限不足导致的错误时,通常会看到类似 ERROR 10…

    2025年12月6日 数据库
    000
  • 如何在mysql中使用备份提高灾备能力

    建立完整备份机制是提升MySQL灾备能力的关键,定期使用mysqldump执行全量备份可确保数据可恢复,如:mysqldump -u root -p –all-databases > full_backup.sql。 在MySQL中,通过合理使用备份策略可以显著提升系统的灾备能力。…

    2025年12月6日 数据库
    000
  • 如何在mysql中修改配置文件my.cnf

    答案是修改MySQL配置需找到正确my.cnf文件,编辑[mysqld]段参数如max_connections和innodb_buffer_pool_size,保存后验证语法并重启服务,最后登录数据库用SHOW VARIABLES确认生效,操作前应备份原文件以防启动失败。 在 MySQL 中修改配置…

    2025年12月6日 数据库
    000
  • 在混合存储架构中配置Intel Optane内存作为缓存加速的适用场景分析

    引入Intel Optane内存作为缓存可显著提升混合存储架构性能,其基于3D XPoint技术,兼具低延迟、高耐久性与非易失性,适用于数据库、虚拟化、内容服务及开发测试等场景。在OLTP数据库中,Optane缓存热数据、加速日志写入与索引查询,实测TPS提升30%-50%;在虚拟化环境如VMwar…

    2025年12月6日 电脑教程
    000

发表回复

登录后才能评论
关注微信