引言

最近又上线了一个项目,感觉自己这段时间收获不少就想把自己做这个项目用的技术总结梳理一下。这个项目是我自己发起,领导们不是特别重视所以得到资源有限,资源有限的情况我只能选择手动搭建数据库环境,资源充足的情况下还是推荐使用类似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主从复制实战记录的更多相关文章

  1. mysql8.0.16操作记录

    mysql8.0.16操作记录 2.1.登录 -uroot -p'AnvcTMagdLarwNV3CKaC' mysql: [Warning] Using a password on the comm ...

  2. Mysql8.0主从复制搭建,shardingsphere+springboot+mybatis读写分离

    1.安装mysql8.0 首先需要在192.167.3.171上安装JDK. 下载mysql安装包,https://dev.mysql.com/downloads/,找到以下页面下载. 下载后放到li ...

  3. CentOS8 安装MySQL8.0

    2019/11/25, CentOS 8,MySQL 8.0 摘要: CentOS 8 安装MySQL 8.0 并配置远程登录 安装MySQL8.0 使用最新的包管理器安装MySQL sudo dnf ...

  4. CentOS8 安装 MySQL8.0(yum)

    1.Mysql 官网下载 RPM 包wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm2.检查是否已安装 ...

  5. CentOS8安装mysql8.0具体步骤

    操作系统:CentOS Linux release 8.0及以上 Mysql版本:Mysql 8.0.22 x86_64 (MySQL Community Server - GPL) Mysql8下载 ...

  6. mysql8.0.主从复制搭建

    搭建主从数据库 一.准备两台以上对的数据库 数据库1(主服务器):192.168.2.2 数据库2(从服务器):192.168.2.4           1.1      配置主服务器 .在 /et ...

  7. centos8安装mysql8.0

    官网下载rpm地址 https://dev.mysql.com/downloads/repo/yum/ wget下载 wget https://repo.mysql.com//mysql80-comm ...

  8. centos7配置mysql8.0主从复制

    注意:1.主库:10.1.131.75,从库:10.1.131.762.server-id必须是纯数字,并且主从两个server-id在局域网内要唯一. [主节点]vi /etc/my.cnf[mys ...

  9. MySQL8.0.12 安装及配置、读写分离,主从复制

    一.安装 1.从网上下载MySQL8.0.12版本,下载地址:https://dev.mysql.com/downloads/mysql/ 2. 下载完成后解压 我解压的路径是:D:\Java\mys ...

随机推荐

  1. [BUAA2021软工助教]结对项目-第二阶段小结

    一.作业链接 结对项目-第二阶段 二.优秀作业推荐 本次博客作业虽然是简单总结,但是以下作业中都不乏有思考.有亮点的精彩内容,推荐给同学们阅读学习. 磨练,结对编程!(中) zzx 和 zzy 同学实 ...

  2. CVE-2020-1350 详解与复现

    # 漏洞简介 在Windows上,DNS服务器是域控制器,其管理员是Domain Admins组的一部分.默认情况下,Domain Admins组是已加入域的所有计算机上Administrators组 ...

  3. jQ的隐式迭代和设置样式属性

    jQ中的隐式迭代 意义:不需要原生迭代了,在jQ内部自动帮你实现了循环 代码实现: let arr = document.querySelectorAll('li') for(let i = 0;i ...

  4. [Python] 网络

    1.应用概念 应用层(Application Layer):将原始信息进行规范化描述,进而通过标准化接口与传输层对接 传输层(Transport Layer):实现信息的切分和重组,以及应用程序间的对 ...

  5. linux操作系统故障处理-ext4文件系统超级块损坏修复

    linux操作系统故障处理-ext4文件系统超级块损坏修复   背景 前天外面出差大数据测试环境平台有7台服务器挂了,同事重启好了五台服务器,但是还有两台服务器启动不起来,第二天回来后我和同事再次去机 ...

  6. R语言执行脚本的几种命令

    R CMD BATCH 和 Rscript 使用前都要先添加环境变量 把 C:\Program Files\R\R-3.3.0\bin; 加到"系统变量"的Path 值的最开始 可 ...

  7. jmeter完成一个简单的性能测试(jp@gc - PerfMon Metrics Collector的运用)

    场景:公司项目解耦,在项目前期对新的架构进行简单的性能测试 工具:jmeter 1.大致结构如下: 1800秒(半个小时)内持续产生20000的线程 创建了聚合报告,主要是查看服务器响应结果以及相应时 ...

  8. Linux 目录管理

    tree命令的基本使用 tree 查看当前目录的树状结构 -a 查看所有包含隐藏文件 -L 1 查看目录层级 tree /root 指定目录 根目录下的主要文件 /bin 普通用户可以执行的二进制文件 ...

  9. redis 处理缓存穿透

    1. 缓存穿透简述 举例说明,redis中确实没有key值为"redis"数据,并且数据库里面也没有,那么每一次都会穿过缓存层,会将请求打到数据库查询,然后数据库进行查询,造成了不 ...

  10. MongoDB(5)- Document 文档相关

    Documents MongoDB 的文档可以理解为关系型数据库(Mysql)的一行记录 MongoDB 将数据记录为 BSON 格式的文档 BSON 是 JSON 文档的二进制表示,但它支持的数据类 ...