基于Ubuntu 20.04 实现MySQL主从同步

2024-06-14 08:28

本文主要是介绍基于Ubuntu 20.04 实现MySQL主从同步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于Ubuntu 20.04 实现MySQL主从同步

环境准备:

1.mysql-master:192.168.1.21
2.mysql-slave:192.168.1.22

1. 安装MySQL 8.0

在主服务器和从服务器上执行以下命令安装MySQL 8.0:

sudo apt update
sudo apt install mysql-server

安装完成后,检查MySQL服务是否在运行:

sudo systemctl status mysql

2. 配置主服务器(Master)

2.1 编辑MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在文件中添加或修改以下内容:

[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = testdb  # 要同步的数据库名称

2.2 重启MySQL服务:

sudo systemctl restart mysql

2.3 创建用于主从同步的用户:

登录MySQL:

sudo mysql -u root -p

在MySQL提示符下执行以下命令创建同步用户并授予权限:

CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

3. 配置从服务器(Slave)

3.1 编辑MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在文件中添加或修改以下内容:

[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log

3.2 重启MySQL服务:

sudo systemctl restart mysql

4. 创建测试数据库和表

在主服务器上,创建一个测试数据库和表:

mysql -u root -p

在MySQL提示符下执行以下SQL命令:

CREATE DATABASE testdb;
USE testdb;CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL
);INSERT INTO test_table (name) VALUES ('zhangsan'), ('lisi'), ('wangwu');

5. 配置从服务器连接到主服务器

5.1 获取主服务器的二进制日志文件名和位置:

在主服务器上执行:

SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1923| testdb       |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

记下输出的FilePosition值。

5.2 在从服务器上配置主从同步:

mysql -u root -p

在MySQL提示符下执行以下SQL命令:

CHANGE MASTER TOMASTER_HOST='192.168.1.21',MASTER_USER='repl',MASTER_PASSWORD='P@ssw0rd',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=1923;START SLAVE;

6. 验证主从同步

6.1 在从服务器上检查从服务器的同步状态:

SHOW SLAVE STATUS;

确保Slave_IO_RunningSlave_SQL_Running都显示为Yes

6.2 在从服务器上检查数据是否同步:

USE testdb;
SELECT * FROM test_table;

如果能看到表中的数据(‘zhangsan’, ‘lisi’, ‘wangwu’),则表示主从同步配置成功。

7. 进行进一步测试

在主服务器上进行数据增删改查的操作,然后去从服务器上验证。

8.遇到的问题

遇到了不少的问题,比如:
1.连不上主服务器:
检查是否绑定了本机访问,需要更改配置文件mysqld.cnf中绑定的IP地址,默认是127.0.0.7,改成0.0.0.0
检查防火墙是否放开了mysql的访问。
2.数据不同步:
查看日志分析
sudo tail /var/log/mysql/error.log
我就是把MASTER_LOG_POS弄错了。导致不能同步
还有就是明明show slave status是正常的,但是数据没有同步,主服务器有testdb数据库和表,从服务器没有,我手动添加了数据库和表都不行。但是在主服务器删除数据库的时候,从服务器的也跟着删除了,后面就正常了。

这篇关于基于Ubuntu 20.04 实现MySQL主从同步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059887

相关文章

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环