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.hqwc.cn/news/637077.html

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

相关文章

Jenkins服务器IP更换,Jenkins URL地址更换

服务器的网络地址发生变动,修改jenkins服务器IP地址后,jenkins网页能够打开,但是job中的配置钩子没有自动改变,如图所示: 经过查询资料了解,需要修改jenkins本地化配置地址才可以显示正确: 1、…

上位机图像处理和嵌入式模块部署(树莓派4b和驱动的编写)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 树莓派4b上面还支持驱动代码的编写,这是我没有想到的。这里驱动,更多的是一种框架的编写,不一定是编写真正的驱…

苹果开发初学者指南:Xcode 如何为运行的 App 添加环境变量(Environmental Variable)

概览 Xcode 15 在运行 SwiftUI 代码时突然报告如下警告: Error: this application, or a library it uses, has passed an invalid numeric value (NaN, or not-a-number) to CoreGraphics API and this value is being ignored. Please fix this problem. 不仅如此…

scratch图章画图 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch图章画图 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、p…

mysql基础14——视图

视图 视图是一种虚拟表 可以把一段查询语句作为视图存储在数据库中 需要的时候把视图看作一个表,对里面的数据进行查询 视图并没有真正存储数据 避免了数据存储过程中可能产生的冗余 提高了存储的效率 子查询 嵌套在另一个查询中的查询 派生表 如果在查询中…

【linux】基础IO(软硬链接)

上一节我们已经搞懂了已经被打开的文件,还有没有被打开的文件都是怎样被管理起来的,同样,路径的重要性也不言而喻,是确定文件在那个分区,进而可以解析到目标文件与目录内容的关系,从而找到inode&#xff0c…

机器学习预测汽车油耗效率 MPG

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接:https://pan.baidu.com/s/1KeIJykbcVpsfEk0xjhiICA?pwd30oe 提取码:30oe --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

【QT学习】8.qt事件处理机制,事件过滤器,自定义事件

1.qt事件处理机制 事件处理: 当用户移动鼠标的时候 ,创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去,事件管理器 从队列中 取出事件,然后 调用其对应的事件处理函数。 多态机制: &#x…

跨考计算机408,小白一定要知道的这件事!

跨考408一定要学好数学! 为什么? 因为这是跨考的同学唯一的优势,408是有门槛的,这个门槛包括但不限于,数据结构,计算机组成原理,操作系统等科目,还有编程能力,推理能力…

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

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

如何在宝塔中使用命令行执行命令

一、 进入宝塔,找到网站然后点击根目录 二、进入项目中,然后点击 终端 三、如果这里会弹出输入密码的框,那就是需要你输入一下你服务器的 账号密码,然后就登录进去了,可以在这里直接执行命令即可,比如我这里…

TorchEEG文档_学习笔记1【代码详解】

文章目录 一、用户文档1.安装Pytorch2.安装TorchEEG3.安装与图算法的插件 二、教程1.使用TorchEEG完成深度学习工作流程2datasets模块3.transforms模块4.models模块5.trainer模块6.使用Vanilla PyTorch训练模型 一、用户文档 1.安装Pytorch TorchEEG依赖于PyTorch,根据系统、…