MySql运维篇

目录

一.日志

1.1日志分类

1.2Error Log

1.3BinaryLog 

1.4SlowQuery Log

二.备份

2.1备份原因

2.2备份目标

2.3备份技术

2.3.1物理备份

2.3.2逻辑备份

2.4备份方式

2.4.1完全备份

2.4.2增量备份

2.4.3差异备份

2.5备份环境准备

2.6完全备份实验

2.6.1完全备份示例

2.6.2恢复数据库

2.7增量备份实验

2.7.1增量备份示例

2.7.2增量备份恢复

2.8差异备份实验

2.8.1差异备份示例

2.8.2差异备份恢复

2.8压缩备份实验

三.数据库集群

3.1集群目的

3.2集群原理图

3.3mysql集群环境搭建

3.4一主一从(M-S)实验1

3.5一主一从(M-S)实验2


一.日志

1.1日志分类

1.2Error Log

vim /etc/my.cnf  进入主配置文件, 观察日志是否启动。
log-error/var/log/myqld.log 该字段, 标记是否启动日志,以及日志位置。
如果哪天mysq|服务起不来了,请来这个日志文件看看。

1.3BinaryLog 

默认没有开启,二进制日志

启动二进制日志:

                          vim /etc/my.cnf

                           log_bin 启动二进制日志

                           server-id=2 指定主机序号

                           systemctl restart mysqld  重启数据库                  

1.4SlowQuery Log

默认慢查询日志未开启

开启慢查询日志:

                          vim /etc/my.cnf   添加如下内容:

                           slow_query_log=1

                           long_query_time=3

                          systemctl restart mysqld  重启服务器          

二.备份

2.1备份原因

数据库中的信息容易丢失,同时也容易被人不小心删除

2.2备份目标

  • 保持数据的一致性
  • 保持服务的可用性

2.3备份技术

物理备份(冷备份)

逻辑备份(热备份)

2.3.1物理备份

直接复制数据库文件,适用于大型数据库环境

拷贝数据,优点快,缺点服务停止

2.3.2逻辑备份

备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低

2.4备份方式

2.4.1完全备份

将原来的数据原封不动地复制一份

2.4.2增量备份

备份上一次备份以来有变化的文件,因此备份体积小,备份速度快,但恢复时间较长

2.4.3差异备份

备份的数据是相对于第一次备份后,后面每次备份的数据,都是相对于第一次备份后的变化的数据,因此占用空间比增量备份大,比完整备份小,恢复时仅需回复第一个完整版本和最后一次的差异版本,恢复速度介于完整备份和增量备份之间

2.5备份环境准备

#yum安装percona仓库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
#安装XtraBackup
yum install percona-xtrabackup-80 -y

2.6完全备份实验

2.6.1完全备份示例

#创建备份目录

mkdir -p /data/backup

#完全备份
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/base/ -uroot -p'Openlab123!' -H localhost -P 3306
对备份参数的解释:
--defaults-file=/etc/my.cnf: 这个选项指定了 MySQL 的配置文件路径。
--backup: 这个选项告诉 xtrabackup 执行一个备份操作。
--target-dir=/data/backup/base/: 此选项指定了备份数据存储的目标目录。
-uroot: 使用 -u 选项后跟用户名(在这里是 root)来指定连接数据库时使用的 MySQL 用户。
-p'Openlab123!': -p 选项后跟的是用于认证的密码。

注意:每次备份时需要将已有的数据清除掉用rm -rf /data/backup/

2.6.2恢复数据库

# 停止MySQL服务,并删除MySQL数据目录下的所有文件  
systemctl stop mysqld
rm -rf /var/lib/mysql/*
# 准备需要备份的文件
xtrabackup --prepare --target-dir=/data/backup/base/
# 开始恢复数据库
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/base
# 授权MySQL数据目录给MySQL用户
chown -R mysql.mysql /var/lib/mysql
# 重启MySQL服务并登录MySQL
systemctl restart mysqld
mysql -uroot -p

2.7增量备份实验

2.7.1增量备份示例

# 在进行增量备份前,需要进行一次完全备份
mkdir -p /data/backup/
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/base/ -uroot -p#A123321000a -H localhost -P 3306 --no-server-version-check

# 在全备的基础上,添加了新的数据后进行了增量备份1
insert into students values (4,'王二');
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/inc1/ --incremental-basedir=/data/backup/base/ -uroot -p#A123321000a -H localhost -P 3306 --no-server-version-check

# 在增量备份1的基础上,再次添加新的数据后进行了增量备份2
insert into students values (5,'黎明');
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/inc2 --incremental-basedir=/data/backup/inc1/ -uroot -p#A123321000a -H localhost -P 3306 --no-server-version-check

注意:每次增量备份基于的目标是上一次的备份,产生变化的数据

2.7.2增量备份恢复

# 停止MySQL服务并删除MySQL数据目录下的所有文件
systemctl stop mysqld
rm -rf /var/lib/mysql/*

# 准备需要备份的文件
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/base/
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/base/ --incremental-dir=/data/backup/inc1
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup/base/ --incremental-dir=/data/backup/inc2

# 开始恢复数据库
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/base/

重新授权后重启MySQL服务
chown -R mysql.mysql /var/lib/mysql
systemctl restart mysqld

这里注意:最后一次增量备份恢复时,不需要添加--apply-log-only参数

2.8差异备份实验

2.8.1差异备份示例

# 在进行差异备份前,需要进行一次完全备份
mkdir -p /data/backup/
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/base/ -uroot -p#A123321000a -H localhost -P 3306 --no-server-version-check
# 在全备的基础上,添加了新的数据后进行了差异备份1
insert into students values (5,'黎明');
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/inc1/ --incremental-basedir=/data/backup/base/ -uroot -p#A123321000a -Hlocalhost -P 3306 --no-server-version-check
# 在全备的基础上,添加了新的数据后进行了差异备份2
insert into students values (6,'章节');
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/inc2/ --incremental-basedir=/data/backup/base/ -uroot -p#A123321000a -H localhost -P 3306 --no-server-version-check

注意:每次差异备份基于的目标是第一次的完全备份,产生变化的数据

2.8.2差异备份恢复

# 停止MySQL服务,并删除MySQL数据目录下的所有文件  
systemctl stop mysqld
rm -rf /var/lib/mysql/*
# 准备需要备份的文件
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/base/
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/base/ --incremental-dir=/data/backup/inc1
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup/base/ --incremental-dir=/data/backup/inc2
# 开始恢复数据库
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/base/
# 授权MySQL数据目录给MySQL用户
chown -R mysql.mysql /var/lib/mysql
# 重启MySQL服务并登录MySQL
systemctl restart mysqld
mysql -uroot -p
注意:最后一次增量备份恢复时,不需要添加--apply-log-only参数

2.8压缩备份实验

创建备份目录,开始压缩备份:

mkdir -p /data/backup/compressed/
xtrabackup --defaults-file=/etc/my.cnf --backup --compress --target-dir=/data/backup/compressed/ -uroot -p#A123321000a -H localhost -P 3306 --no-server-version-check

 解压缩:

#解压缩前,删除原有的数据
systemctl stop mysqld
rm -rf /var/lib/mysql/*
解压缩(压缩的文件,需要解压后才能使用):
xtrabackup --defaults-file=/etc/my.cnf --decompress --target-dir=/data/backup/compressed/

恢复数据到mysql中:

#准备备份文件
xtrabackup --prepare --target-dir=/data/backup/compressed
#开始拷贝文件
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/compressed/
#重启服务并登录MYSQL
systemctl restart mysqld
 mysql -uroot -p
注意:解压时报错,安装yum install qpress -y

三.数据库集群

3.1集群目的

  • 实现负载均衡,解决高并发
  • 高可用HA,提高服务的可用性
  • 远程灾备,保证数据的有效性

3.2集群原理图

原理:当主库中的数据发生变化时,会记录到他的二进制日志中,从库的I/O线程会读取主库中的二进制日志,然后写入中继日志中,最后SQL线程会读取中继日志中的信息,将数据存储到本地数据库中。

3.3mysql集群环境搭建

IP规划:

master1:192.168.145.133
master2:192.168.145.135
slave1:192.168.145.134
slave2:192.168.145.136
mycat:192.168.145.137(不安装mysql)

域名配置(5台机器都配置):

vim /etc/hosts
192.168.145.133 master1
192.168.145.135 master2
192.168.145.134 slave1
192.168.145.136 slave2
192.168.145.137 mycat
在第一台配置域名解析的服务器上对剩余4台机器快捷配置域名解析:
scp /etc/hosts 192.168.145.134:/etc/     
scp /etc/hosts 192.168.145.135:/etc/     
scp /etc/hosts 192.168.145.136:/etc/     
scp /etc/hosts 192.168.145.137:/etc/    

注意:在进行环境搭建时,必须是全新的未安装mysql的服务器

3.4一主一从(M-S)实验1

环境:

主(master1)
从(master2)
前提:安装了mysql,以及做好了域名解析:基于mysql集群的环境下进行

主(master1)端配置:


准备数据1(验证主从同步使用):
        create database master1db;
        create table master1db.master1tab(name char(50));
        insert into master1db.master1tab values(111);
        insert into master1db.master1tab values(222);

开启二进制日志:
 vim /etc/my.cnf #添加以下两行
log_bin
server-id=1
systemctl restart mysqld

授予用户权限
#登录数据库
mysql -uroot -p
#创建用户yulang,允许从IP地址以192.168.145开头的主机连接,并设置密码为#A123321000a
CREATE USER 'yulang'@'192.168.145.%' IDENTIFIED BY '#A123321000a'; 
#授予用户yulang从IP地址以192.168.145开头的主机上的所有数据库的复制从服务器和复制客户端权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'yulang'@'192.168.145.%';

退出mysql,备份master数据库的数据
mysqldump -p'#A123321000a' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql   # 导出数据库的备份,使用密码#A123321000a,采用单个事务导出,生成带有日期的文件名                                                                                                                           
准备数据2(验证主从同步使用):
mysql -uroot -p
insert into master1db.master1tab values(333);
insert into master1db.master1tab values(444);

从(master2)端配置:

测试yulang用户是否可用:
mysql -uyulang -p#A123321000a -h master1 
当这里登不进时,需要在每台服务器上关闭selinux和防火墙
setenforce 0
systemctl stop firewalld


启动服务器序号:
vim /etc/my.cnf
server-id=2
systemctl restart mysqld
mysql -uroot -p


手动同步数据,在主服务器端将数据同步到从服务器:
scp 2024-03-07-mysql-all.sql master2:/tmp/    #这一步在主服务器端操作
mysql -uroot -p
set sql_log_bin=0;
source /tmp/2024-03-07-mysql-all.sql; #将从服务器中临时目录中的数据同步到mysql中
select * from master1db.master1tab;     #查询是否同步成功

指定从服务器上的主服务器:
 vim 2024-03-07-mysql-all.sql  #此步在主服务器操作,将显示的数据添加到从服务器中
 CHANGE MASTER TO MASTER_LOG_FILE='bogon-bin.000002', MASTER_LOG_POS=157;

 #指定主从关系

CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='yulang', MASTER_PASSWORD='#A123321000a',  MASTER_LOG_FILE='bogon-bin.000002', MASTER_LOG_POS=157;

启动从设备,让主从关系生效:
start slave;
 

查看同步状态:

show slave status\G;  #显示如下两行时,说明同步成功

  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

验证是否同步成功:

我们向主服务器插入数据:

mysql> insert into master1db.master1tab values(666);
Query OK, 1 row affected (0.03 sec)

mysql> select * from master1db.master1tab;
+------+
| name |
+------+
| 111  |
| 222  |
| 333  |
| 444  |
| 555  |
| 666  |
+------+
6 rows in set (0.00 sec)
 

转向从服务器查看同步的数据:

mysql> select * from master1db.master1tab;
+------+
| name |
+------+
| 111  |
| 222  |
| 333  |
| 444  |
| 555  |
| 666  |
+------+
6 rows in set (0.01 sec)

发现主服务器的数据确实同步到了从服务器中

3.5一主一从(M-S)实验2

与实验1的区别:自动记录二进制位置,不需要手动指定

master1端配置:

启动二进制日志,服务器ID,GTID
vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
systemctl restart mysqld


备份数据
mysqldump -p --all-databases --single-transaction --set-gtid-purged=OFF --flush-logs > "$(date +\%F-\%H)-mysql-all.sql"
scp 2024-03-08-17-mysql-all.sql master2:/tmp
root@master2's password:    #注意这里不要输成了mysql的登录密码

模拟数据变化
insert into master1db.master1tab values(777);

master2配置:

重置从服务器的数据库
systemctl stop mysqld
rm -rf /var/lib/mysql/*
systemctl start mysqld
grep password /var/log/mysqld.log
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '#A123321000a';

测试主服务器上的yulang用户是否可用
mysql -h master1 -uyulang -p  #登录到master1数据库

启动二进制日志,服务器ID,GTID
vim /etc/my.cnf
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
systemctl restart mysqld

将tmp目录下的数据同步到mysql中
mysql -uroot -p
set sql_log_bin=0; #临时关闭二进制日志
source /tmp/2024-03-08-17-mysql-all.sql
select * from master1db.master1tab;

设置主从关系
change master to master_host='master1',master_user='yulang',master_password='#A123321000a',master_auto_position=1;
这里注意我遇到了 Slave_IO_Running: Connecting的问题,其原因是我在进行设置主从关系的时候,将密码打错了
解决:
stop slave;
change master to master_host='master1',master_user='yulang',master_password='#A123321000a',master_auto_position=1;
显示主从状态
show slave status\G;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

https协议的加密方式详解

各位大佬能多多点赞关注评论收藏,球球各位大佬们了!! ! 目录 1.为什么要加密? 2.如何加密 1.密钥(yue,第四声) 2.对称加密 3.非对称加密 4.公证机构 3.总结 1.为什么要加密?…

趋势分析 一元线性回归及显著性检验 GIS方法 Slope

slope斜率计算公式: 假设有三年的NDVI图像 加载3年栅格数据,公式中n取3计算分子左边: 3*(1*"1990.tif"2*"1991.tif"3*"1992.tif") 计算分子右边: 6*("1990.tif""1991.tif"&q…

算法课程笔记——STL题目

长度为2的字符串,当in下标为一,也就是\n,当i!n,就是输出空格 &&且 city从citys里面取 加速后就不能混用scanf

CoFSM基于共现尺度空间的多模态遥感图像匹配方法--论文阅读记录

目录 论文 Multi-Modal Remote Sensing Image Matching Considering Co-Occurrence Filter 参考论文:SIFT系列论文, SIFT Distinctive Image Features from Scale-Invariant Keypoints,作者:David G. Lowe 快速样本共识算法…

汇智知了堂晨会聚焦:NAS应用如何赋能网络安全实战

在近期汇智知了堂网络安全75班的晨会上,一场关于NAS应用的深入分享完美展开。学员们以饱满的热情投入到这场安全讨论中,共同探索网络安全的新天地。 此次分享会聚焦于NAS的应用,旨在帮助学员们更好地了解NAS的定义与功能,掌握其在…

52.基于SpringBoot + Vue实现的前后端分离-房屋租赁系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的房屋租赁系统设计与实现管理工作系统…

【Linux系统化学习】线程控制

目录 前言 POSIX线程库 线程控制 创建线程 线程终止 pthread_exit()函数 pthread_cancel()函数(会在下面线程等待部分详解) 线程等待 pthread_join()函数 获取线程退出码 分离线程 线程取消(pthread_cancel()函数) 线程ID及进程…

open Gauss 数据库-06 openGauss数据库安全指导手册5.0.0

发文章是为了证明自己真的掌握了一个知识,同时给他人带来帮助,如有问题,欢迎指正,祝大家万事胜意! 目录 前言 openGauss数据库安全指导 1 用户权限控制 1.1 实验介绍 1.1.1 关于本实验 1.1.2 实验目的 1.2 用户…

富文本编辑器(wangEdit)+(jquery.wordexport)实现web版在线编辑导出

小插曲:最开始的方向是Html5的contenteditable"true"的文档可编辑属性。只能修改文档文字内容,不能修改样式,如修改字体,字号,颜色等。于是用了第一款(quil)富文本插件。只能说一般&a…

IEEE PDF eXpress Validating Pdf..之后Error in converting file

在将自己写好的pdf论文转化为IEEE出版的pdf论文格式的时候,错误如下图: 解决办法如下:失败之后,那里有一个选项按钮,叫做manual request,也就是人工转换,点那个申请就可以了,然后也挺…

jdk keytool.exe生成keystore https证书,利用jks2pfx转换nginx证书,nginx配置证书

jdk keytool.exe生成keystore https证书,利用jks2pfx转换nginx证书,nginx配置证书 由于项目需要https访问,使用ngigx配置https证书,在用nginx代理到 各个tomcat,比tomcat直接配置https证书方便,记录下自己制作nginx https证书文件,以及配置的过程. 由于证书不是证书机构颁…

我与C++的爱恋:类和对象(四)

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:我与C的爱恋 ​ 朋友们大家好!本篇是类和对象的最后一个部分。 一、static成员 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之…

Ctrl + B 复制图片Base64

简介 这是一个专为Windows系统设计的工具,用于快速获取资源管理器(文件夹)中选中图片文件的Base64编码。 背景 由于工作需求经常需要获取图片的Base64并粘贴到postman中调用接口。最开始的做法是使用在线工具将图片转换为Base64编码&#…

DBUnit增强:填充随机数据和相对时间数据

痛点 测试环境验证时,遇到与当前相对时间相关的测试吗?准备一份SQL?隔一段时间就不能用了。每过一段时间去更新脚本或重置系统时间?看上去也不是很合适的解决方案。依赖数据测试时要重新做,演示时候得全部改&#xff…

Mini-Gemini: 探索多模态视觉语言模型的新境界

一、背景 在数字化时代,人工智能的发展正以前所未有的速度推进。特别是在多模态学习领域,结合视觉和语言的能力已成为研究的热点。最近,一篇名为“Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models”的文章在arX…

05 MySQL--字段约束、事务、视图

1. CONSTRAINT 约束 创建表时,可以给表的字段添加约束,可以保证数据的完整性、有效性。比如大家上网注册用户时常见的:用户名不能为空。对不起,用户名已存在。等提示信息。 约束包括: 非空约束:not null检…

【C++类和对象】const成员函数及流插入提取

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

Elasticsearch 开放 inference API 增加了对 OpenAI chat completions 的支持

作者:Tim Grein 我们很高兴地宣布在 Elasticsearch 中推出的最新创新:在 Elastic 的 inference API 中集成了 OpenAI Chat Completions 功能。这一新特性标志着我们在整合尖端人工智能能力至 Elasticsearch 的旅程中又迈出了一步,提供了生成类…

凭证自动拆分

凭证自动拆分 一、设置拆分中间科目 OBX2配置凭证拆分的中间科目 二、销售开票凭证拆分 SE18创建BADI "FI_BILL_ISSUE_SPLIT"的实施 修改实施类:ZCL_FI_BILL_ISSUE_SPLIT中IF_EX_FI_BILL_ISSUE_SPLIT~ACTIVATE_AUTOMATIC_SPLIT方法,代码…

ruoyi-vue前端的一些自定义插件介绍

文章目录 自定义列表$tab对象打开页签关闭页签刷新页签 $modal对象提供成功、警告和错误等反馈信息(无需点击确认)提供成功、警告和错误等提示信息(类似于alert,需要点确认)提供成功、警告和错误等提示信息&#xff08…