引言

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

      项目点击属性  2.3  转换成2.5    已经变成一个网站项目了     报错消失 pom.xml <project xmlns="http://maven.apache.or ...

  2. 如何使用java搭建一款高性能的Mqtt集群broker!

    SMQTT是一款开源的MQTT消息代理Broker, SMQTT基于Netty开发,底层采用Reactor3反应堆模型,支持单机部署,支持容器化部署,具备低延迟,高吞吐量,支持百万TCP连接,同时支持 ...

  3. Python中的迭代器、生成器、装饰器

    1. 迭代器  1 """ 2 iterator 3 迭代器协议: 对象必须提供一个next()方法,执行该方法要么返回迭代中的下一项,要么引起一个StopIterati ...

  4. 03.28,周六,12:00-17:00,ICPC训练联盟周赛,选用试题:UCF Local Programming Contest 2016正式赛。

    A. Majestic 10 题意:三个数均大于10则输出"triple-double",如果两个数大于10则输出"double-double",如果一个大于1 ...

  5. NIOSII IDE在WIN7下 couldn't allocate heap

    首先,所有的文件夹都不能有空格和中文 其次,出现这些SB错误 make -s all includes 3 [main] ? (3732) c:\altera\91\quartus\bin\cygwi ...

  6. Objective-C 中不带加减号的方法

    显而易见的事实是,Objective-C 中,+ 表示类方法,- 表示实例方法. 但看别人代码过程中,还会发现一种,不带加减号的方法. @implementation MyViewController ...

  7. [bug] Hive启动报错:hive Name node is in safe mode.

    关闭HDFS安全模式 hadoop dfsadmin -safemode leave

  8. [设计模式] 设计模式课程(二十)--命令模式(Command)

    概述 "行为变化"模式:组件构建过程中,组件行为的变化经常会导致组件本身剧烈的变化."行为变化"模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现 ...

  9. [Linux] Linux命令行与Shell脚本编程大全 Part.3

    Shell Shell 是管理命令行的程序(包在内核外的壳) 不同Shell版本演化关系如下,一般Linux中会自动安装Sh和Bash(Bash比Sh好写,Zsh最好用) .bashrc:Bash 的 ...

  10. stressapptest工具

    1.在H桌面V7B04上运行stressapptest工具编译报错.请研发协助! 2.因为stressapptest工具在兆芯和龙芯都能正常运行,所以我怀疑是工具stressapptest未在H桌面V ...