Centos8.3、mysql8.0主从复制实战记录
引言
最近又上线了一个项目,感觉自己这段时间收获不少就想把自己做这个项目用的技术总结梳理一下。这个项目是我自己发起,领导们不是特别重视所以得到资源有限,资源有限的情况我只能选择手动搭建数据库环境,资源充足的情况下还是推荐使用类似PolarDB这种云数据库。原因很多,稳定性好、使用维护简单、扩容方便、还提供一系列的sql审计工具。
环境准备
|
号 |
环境和软件 |
版本 |
数量 |
|
1 |
centos |
8.3 |
3 |
|
2 |
mysql |
8.0.21 |
3 |
安装命令
yum -y install mysql-server # 安装mysql -y 的意思就是安装过程如果需要输入y 可以不用在输入。
systemctl enable mysqld.service # 设置为开启自启
systemctl start mysqld.service # 开启mysql服务
vim /etc/my.cnf # 编辑mysql配置文件 默认安装是在/etc目录下
skip-grant-tables --shared-memory # 设置跳过密码 添加到[service-clinet]标签下如下图:

mysql -u root -p # 输入命令 然后回车键跳过密码登录
ALTER USER 'root'@'localhost' IDENTIFIED BY 'jishuzhai'; #添加root用户和密码 注意localhost意味这不能远程登录可以换成% 这里不推荐 建议创建新的账号远程访问
再次编辑 /etc/my.cnf文件注释掉刚才跳过密码那句话
systemctl restart mysqld.service # 重启mysql服务
mysql安装注意事项
安装命令这里只供参考,不过个人推荐使用yum命令安装,这样简单快捷而且方便扩容,不过有一点在生产环境要注意,那就是磁盘初始容量一定要大,最好是冗余的,即使初始化数据容量很小。主从会产生大量的日志文件,磁盘容量很小很容易导致磁盘被写满,那个时候再去扩容需要停机维护。另外数据库备份推荐备份目录为数据盘并且主从数据库都备份。
创建远程访问的账号
CREATE USER 'proxysql'@'%' IDENTIFIED BY 'jishuzhai'; #创建账号
GRANT ALL PRIVILEGES ON *.* TO 'proxysql'@'%' WITH GRANT OPTION; # 赋予权限
flush privileges; # 刷新权限
注意 读取账号只需要主数据库一个就可以了,但是这里为了下一步使用proxysql做读写分离 所以每一个数据库实例都创建了一个账号。
创建测试数据库
CREATE DATABASE brief_test;# 创建数据库 CREATE TABLE `test` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
`service_name` varchar(50) NOT NULL COMMENT '自增',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; # 创建测试表 INSERT INTO `test` VALUES (1, 'master');
INSERT INTO `test` VALUES (2, 'slave1');
INSERT INTO `test` VALUES (3, 'slave2'); # 添加测试数据
注意在主库上创建 然后同步到所有从数据库 主从开始前要保证数据一致 不然会绑定失败。
编辑主从数据库配置
登录到主数据的服务器编辑数据库配置文件
将以下配置添加到/etc/my.conf 文件中 如下图
[mysqld]
#配置主库
server_id=1 #服务器id 不能重复 1,2,3,4这种以此类推
log_bin=master-bin
log_bin-index=master-bin.index
binlog-do-db=brief_test #需要同步的数据库名称 配置多个数据库需要配置多个binlog-do-db 例如 binlog-do-db=brief_test1 binlog-do-db=brief_test2 binlog-do-db=brief_test3 这种方式配置

systemctl restart mysqld.service#重启mysql服务
登录到从数据库将以下配置添加到/etc/my.conf文件中如下图
[mysqld]
server_id=2 #服务编号不能重复
read_only=on #设置为只读

systemctl restart mysqld.service #重启mysql服务
最后一步配置主从
(1)登录主数据库 执行 show master status 如下图

记录file 和 position的值从数据库绑定要用的到
(2)登录从数据库执行:
CHANGE MASTER TO MASTER_HOST='172.16.102.7', #主数据库ip
MASTER_PORT=3306, #主数据库端口
MASTER_USER='proxysql', #主数据库复制账号
MASTER_PASSWORD='jishuzhai', #主数据库密码
MASTER_LOG_FILE='master-bin.000001', #刚才从master数据库查询file值
MASTER_LOG_POS=156; #刚才从master数据库查询postition值
然后执行
start slave; #开启slave
然后执行
show slave status;#查看slave状态
正确结果如下图:

常见问题:
show slave status结果slave_io_running 和 slave_sql_running值均为No或者一个为no,我遇到四种情况。
第一种情况是server_id 重复。Mysql 8.0 的 server_id 必须在[mysql]标签下 而且必须在[clinet-servser]配置之前才生效,结果就导致我明明配置server_id 却还是连接失败。针对这种情况可以使用
select @@server_id #查询数据库的server_id 可以看到当前的id
第二种情况是uuid重复 使用虚拟机安装好数据库 然后克隆出slave1、slave2 这种情况uuid也是重复的 导致连接失败。针对这种情况可以手动修改
vim /var/lib/mysql/auto.cnf 如下图:

随便更改一个字符保持uuid 不重复即可。
第三种情况 主从数据库不一致 主要表现某个应用连接到从数据库并且写入了数据 从数据库虽然设置了只读 但是root权限的账号可以写入。这种情况最麻烦但是好处理。停止所有应用或者设置主数据库锁住 然后把主数据同步到从数据库然后重新连接。
第四种情况 事物回滚导致的 这种情况比少但是好处理
使用以下命令:
STOP SLAVE #先执行关闭语句
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;#重置值
START SLAVE #打开语句
关于清理binary日志
主从会产生大量的日志文件 可以使用一下方式自动清理
show binary logs;#查询日志
set GLOBAL binlog_expire_logs_seconds = 1296000 #设置日志过期时间为15天单位秒 超过15的会被自动清除
SELECT @@binlog_expire_logs_seconds #查询是否生效
flush logs;# 立即生效
Centos8.3、mysql8.0主从复制实战记录的更多相关文章
- mysql8.0.16操作记录
mysql8.0.16操作记录 2.1.登录 -uroot -p'AnvcTMagdLarwNV3CKaC' mysql: [Warning] Using a password on the comm ...
- Mysql8.0主从复制搭建,shardingsphere+springboot+mybatis读写分离
1.安装mysql8.0 首先需要在192.167.3.171上安装JDK. 下载mysql安装包,https://dev.mysql.com/downloads/,找到以下页面下载. 下载后放到li ...
- CentOS8 安装MySQL8.0
2019/11/25, CentOS 8,MySQL 8.0 摘要: CentOS 8 安装MySQL 8.0 并配置远程登录 安装MySQL8.0 使用最新的包管理器安装MySQL sudo dnf ...
- CentOS8 安装 MySQL8.0(yum)
1.Mysql 官网下载 RPM 包wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm2.检查是否已安装 ...
- CentOS8安装mysql8.0具体步骤
操作系统:CentOS Linux release 8.0及以上 Mysql版本:Mysql 8.0.22 x86_64 (MySQL Community Server - GPL) Mysql8下载 ...
- mysql8.0.主从复制搭建
搭建主从数据库 一.准备两台以上对的数据库 数据库1(主服务器):192.168.2.2 数据库2(从服务器):192.168.2.4 1.1 配置主服务器 .在 /et ...
- centos8安装mysql8.0
官网下载rpm地址 https://dev.mysql.com/downloads/repo/yum/ wget下载 wget https://repo.mysql.com//mysql80-comm ...
- centos7配置mysql8.0主从复制
注意:1.主库:10.1.131.75,从库:10.1.131.762.server-id必须是纯数字,并且主从两个server-id在局域网内要唯一. [主节点]vi /etc/my.cnf[mys ...
- MySQL8.0.12 安装及配置、读写分离,主从复制
一.安装 1.从网上下载MySQL8.0.12版本,下载地址:https://dev.mysql.com/downloads/mysql/ 2. 下载完成后解压 我解压的路径是:D:\Java\mys ...
随机推荐
- Django(6)自定义路由转换器
自定义路径转换器 有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器 django内置的路径转换器源码解析 在我们自定义路由转 ...
- Elasticsearch入门,看这一篇就够了
目录 前言 可视化工具 kibana kibana 的安装 kibana 配置 kibana 的启动 Elasticsearch 入门操作 操作 index 创建 index 索引别名有什么用 删除索 ...
- MySQL redo与undo日志解析
前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍.相对于其他几种日志而言, redo log 和 undo log 是更 ...
- CRM是什么意思,有哪些作用?
我们总会听到一些人提到CRM或CRM系统,但是通常不知道它的含义,所以今天小Z就来详细介绍一下CRM. GartnerGroup1993年首次提出了这一概念:所谓的客户关系管理就是为企业提供一个全面的 ...
- 在ActiveMQ中使用SingleConnectionFactory遇到的坑
我们在生产环境使用了ActiveMQ作为消息中间件,消息中间件连接到数据库对消息进行持久化. 最近发生了一个奇怪的事情,消费者端的生产日志总是报如下错误: The JMS connection has ...
- Duplicate entry '' for key 'PRIMARY'
今天在在mysql中插入数据 因为直接插入查询出来的表格,insert into 表(student_id,class_id) 直接插入了这两个字段对应的查询出来的表 没有留意到该表的主键没有设置自增 ...
- NPM包管理器入门(附加cnpm : 无法加载文件错误解决方案)
NPM 包管理器 1.作用: 快速构建nodejs工程 快速安装和依赖第三个模块 2.使用方法 快速构建 npm init 会得到一package.json文件 { "name": ...
- [BD] HBase
NoSQL数据库 关系型数据库:用表格的行-列来保存数据,OLTP,写入多,行式存储 非关系型数据库:只用来存储数据,业务逻辑由应用程序处理,OLAP,查询多,列式存储 常见NoSQL数据库 Redi ...
- 007.Ansible变量Fact,魔法变量和lookup生成变量
一 fact变量 1.1 fact简介 ansible有一个模块叫setup,用于获取远程主机的相关信息,并可以将这些信息作为变量在playbook里进行调用.而setup模块获取这些信息的方法就是 ...
- Ansible playbook编写Apache角色
编写Apache角色:使用源码安装 在files中下载扩展包和安装包 [root@localhost project]# ls roles/httpd/files/ apr-1.6.5.tar.gz ...