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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
uc浏览器如何开启夜间模式 uc浏览器护眼模式与深色主题设置
上一篇 2025年12月2日 05:11:42
css清除浮动在表格布局中的实践
下一篇 2025年12月2日 05:11:45

相关推荐

  • Linux怎么使用systemctl管理服务

    Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务

    systemctl是Linux中管理systemd服务的核心工具,提供统一命令集来启动、停止、重启、查看服务状态及设置开机自启,支持并行启动、依赖管理与Cgroups资源控制,相比SysVinit更高效;通过创建/etc/systemd/system/下的.service文件可自定义服务,包含[Un…

    2026年9月21日 用户投稿
    100
  • mysql如何优化子查询

    优先使用JOIN替代相关子查询,减少扫描行数并利用索引;对子查询字段建立合适索引;用EXISTS代替IN处理大量数据;物化不相关子查询结果;避免无索引的标量子查询;通过EXPLAIN分析执行计划优化性能。 MySQL中子查询如果使用不当,容易导致性能下降,尤其是在数据量大的情况下。优化子查询的核心是…

    2026年9月21日
    000
  • 如何在服务器上优化mysql安装

    优化MySQL需从系统环境、配置参数、存储引擎到日常维护多层面入手,首先确保内存合理分配、选用XFS等高性能文件系统、关闭非必要服务并调整内核参数;其次在MySQL配置中优先使用InnoDB引擎,科学设置innodb_buffer_pool_size、innodb_log_file_size、max…

    2026年9月21日
    000
  • mysql如何启用binlog日志

    MySQL启用binlog需修改配置文件添加log-bin和server-id,重启服务后执行SHOW VARIABLES LIKE ‘log_bin’验证是否为ON,确认启用。 MySQL启用binlog日志需要修改配置文件并重启服务,同时可进行简单验证确保生效。以下是具体…

    2026年9月21日
    000
  • mysql如何使用事务保证操作原子性

    答案:MySQL中事务通过START TRANSACTION开启,需使用InnoDB引擎并关闭自动提交,执行SQL后根据结果COMMIT或ROLLBACK,结合异常处理确保原子性。 在MySQL中,事务是保证数据库操作原子性的核心机制。通过事务,可以确保一组SQL操作要么全部成功执行,要么全部不执行…

    2026年9月21日
    500
  • mysql如何理解索引选择性

    索引选择性是衡量索引效率的关键指标,定义为索引列不同值数量与总行数的比值,范围在0到1之间。越接近1,数据唯一性越高,索引过滤能力越强,查询性能越好。例如主键列选择性为1,而性别列因重复值多选择性极低。MySQL优化器会优先选择高选择性索引以缩小搜索范围,提高执行效率。可通过SELECT COUNT…

    2026年9月21日
    000
  • CentOS安装Mysql8.0图文教程[通俗易懂]

    CentOS安装Mysql8.0图文教程[通俗易懂]CentOS安装Mysql8.0图文教程[通俗易懂]CentOS安装Mysql8.0图文教程[通俗易懂]CentOS安装Mysql8.0图文教程[通俗易懂]

    大家好,又见面了,我是你们的朋友全栈君。 本文将为您提供一个详细的CentOS通过yum安装Mysql8.0的图文教程,并指导您如何配置和运行Mysql,使其能够被外部访问。 首先,我们需要从官网下载对应的rpm包,并复制下载链接。 接着,执行以下命令进行下载: # 先进入到local文件夹cd u…

    2026年9月21日 用户投稿
    100
  • mysql如何配置ssl安全连接

    MySQL支持SSL时返回YES,通过生成证书并配置my.cnf中的ssl-ca、ssl-cert、ssl-key启用SSL,创建REQUIRE SSL用户确保加密连接,客户端连接需指定证书参数,STATUS或Ssl_cipher验证加密状态。 MySQL 配置 SSL 安全连接可以提升数据库通信的…

    2026年9月21日
    200
  • mysql如何在SQL中使用聚合函数

    聚合函数用于统计计算并返回单个值,常见函数有COUNT、SUM、AVG、MAX、MIN,通常与GROUP BY配合使用。1. COUNT统计非空值或总行数,SUM求和,AVG求平均,MAX和MIN分别取最大最小值。2. 对orders表整体统计可得总订单数、总额等信息。3. 按user_id分组后可…

    2026年9月21日
    400
  • 连接管理(Connection)的核心逻辑

    连接管理的核心逻辑包括资源管理、性能优化、错误处理和安全性。1. 连接池是关键,预先创建连接存放在池中,使用后归还。2. 连接池大小需平衡,太小导致连接不足,太大浪费资源。3. 生命周期管理要处理长时间 unused 和死连接。4. 错误处理确保系统稳定性。 在编程世界里,连接管理(Connecti…

    2026年9月21日
    100
  • MySQL如何高效存储时间日期数据_时区和格式问题处理?

    MySQL如何高效存储时间日期数据_时区和格式问题处理?MySQL如何高效存储时间日期数据_时区和格式问题处理?MySQL如何高效存储时间日期数据_时区和格式问题处理?MySQL如何高效存储时间日期数据_时区和格式问题处理?

    核心策略是统一存储utc时间并由应用层处理时区转换与格式化。1.timestamp适合跨时区场景,自动转换utc且节省空间;2.datetime适合固定日期事件,不随时区变化;3.写入前应用层转utc,读取后转用户本地时间;4.格式化应在应用层完成以提升性能与灵活性;5.避免字符串存储时间,优先使用…

    2026年9月21日 用户投稿
    100
  • 事务(Transaction)处理与并发控制

    事务处理确保操作全部完成或不完成,并发控制防止事务互相干扰。事务处理核心是acid属性:1.原子性,2.一致性,3.隔离性,4.持久性;并发控制方法包括锁和mvcc,优化需考虑事务粒度、隔离级别、锁和mvcc的应用。 事务处理与并发控制是数据库管理系统中至关重要的两个概念,确保数据的一致性和完整性。…

    2026年9月20日
    100
  • mysql如何启用query cache

    MySQL 5.7及之前版本可通过配置启用Query Cache以提升读取性能,首先确认支持性:执行SHOW VARIABLES LIKE ‘have_query_cache’,若返回YES则可继续。接着在my.cnf或my.ini的[mysqld]段添加query_cach…

    2026年9月20日
    200
  • time函数处理时间在mysql中如何操作

    MySQL中的时间函数用于处理时间数据,如获取当前时间用NOW()或CURTIME(),提取时间部分用TIME(),格式化输出用TIME_FORMAT(),时间计算可用TIMEADD()、TIMEDIFF()等函数,支持加减和差值运算,需注意字段类型与格式匹配。 在 MySQL 中,time 函数和…

    2026年9月20日
    100
  • 如何安装mysql GUI管理工具

    首选安装MySQL Workbench,Windows下载MSI安装,macOS拖拽DMG到应用,Linux用apt命令安装,也可选phpMyAdmin、DBeaver等工具。 安装 MySQL 图形化管理工具(GUI)可以让你更方便地操作数据库,比如建表、查询、备份等。最常用且官方推荐的工具是 M…

    2026年9月20日
    100
  • 升级后如何处理存储过程

    数据库升级后需检查存储过程的语法兼容性、对象依赖和权限设置。例如,MySQL 8.0 不再支持模糊 GROUP BY,SQL Server 强化参数校验,应使用官方文档和工具检测语法变更。通过 INFORMATION_SCHEMA 或 sys.sql_expression_dependencies …

    2026年9月20日
    000
  • between区间查询在mysql中如何使用

    BETWEEN操作符用于查询闭区间内的数据,包含边界值,支持数字、日期和字符串类型,常用于WHERE子句中。 在 MySQL 中,BETWEEN 操作符用于选取介于两个值之间的数据范围,常用于 WHERE 子句中进行区间查询。它支持数字、日期和字符串类型的比较,语法简洁且高效。 基本语法 BETWE…

    2026年9月20日
    000
  • MySQL备份数据加密技术_MySQL保障备份数据安全的策略

    MySQL备份数据加密技术_MySQL保障备份数据安全的策略MySQL备份数据加密技术_MySQL保障备份数据安全的策略MySQL备份数据加密技术_MySQL保障备份数据安全的策略MySQL备份数据加密技术_MySQL保障备份数据安全的策略

    加密是保障mysql备份数据安全的核心,但还需结合多层次防护体系。1.静态数据加密可通过文件系统层(如luks、bitlocker)或数据库内部(tde)实现;2.备份文件应独立加密(如gpg、openssl);3.传输中需使用scp、https等加密通道;4.密钥管理至关重要,需单独妥善处理。备份…

    2026年9月20日 用户投稿
    000
  • mysql事务和锁如何协同工作

    事务隔离级别决定锁行为,InnoDB通过MVCC与行锁协同保障ACID;不同隔离级别下读写操作加锁策略不同,SELECT默认快照读不加锁,UPDATE/DELETE加排他锁,INSERT可能触发间隙锁;死锁由系统自动检测并回滚代价小的事务;MVCC利用版本链实现非阻塞一致性读,提升并发性能。 MyS…

    2026年9月20日
    000
  • mysql如何优化like模糊查询

    优先使用前缀匹配并建立索引,避免前置通配符导致全表扫描;对大字段采用全文索引或外部搜索引擎如Elasticsearch;合理设计覆盖索引,减少SELECT *,提升查询效率。 在MySQL中,LIKE模糊查询虽然常用,但容易导致性能问题,特别是在数据量大的情况下。优化的关键在于减少全表扫描、提升索引…

    2026年9月20日
    000

发表回复

登录后才能评论
关注微信