Day02-MySQL数据库服务体系结构

news2024/11/30 6:34:22

Day02-MySQL数据库服务体系结构

  • 1、数据库服务连接管理
  • 2、数据库服务应用配置
    • 2.1 服务进行配置有什么作用?
    • 2.2 应用配置有三种方式:
  • 3、数据库服务多实例构建
  • 4、数据库服务版本升级
    • 4.1 实现升级的方法:
    • 4.2 常见的数据库服务程序升级方式:
    • 4.3 数据库服务升级注意事项
    • 4.4 数据库服务升级过程规划(Inplace)
    • 4.5 数据库服务升级过程实战
      • 4.5.1 企业数据库实战练习一:演示5.6.48 ->5.7.30 本地升级
      • 4.5.2 企业数据库实战练习二:演示5.7.30 ->8.0.20本地升级)
    • 4.6 数据库服务升级回滚实践
      • 4.6.1 数据库服务升级失败,如何回滚操作:大版本回滚
      • 4.6.2 企业数据库实战练习二:跨小版本回滚
    • 4.7 数据库服务升级版本确认
  • 5、数据库服务工作模型
  • 6、数据库服务实例构成
  • 7、数据库服务程序结构

作业:

01 如何编写MySQL的systemctl启动文件;

vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

[root@db01 ~]# systemctl daemon-reload
[root@db01 ~]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/etc/systemd/system/mysqld.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-04-16 20:35:30 CST; 12min ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
   CGroup: /system.slice/mysqld.service
           ├─1414 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/3306/data --pid-fi...
           └─1579 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/3306...

Apr 16 20:35:27 db01 systemd[1]: Starting LSB: start and stop MySQL...
Apr 16 20:35:30 db01 mysqld[1399]: Starting MySQL... SUCCESS!
Apr 16 20:35:30 db01 systemd[1]: Started LSB: start and stop MySQL.

PS:以上操作过程,需要关闭数据库服务进行

02 安装好5.6 5.7数据库

安装部署5.6

# 第一步:上传程序压缩包/并进行解压
cd /usr/local/
mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz
tar xf mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.6.48-linux-glibc2.12-x86_64 mysql56

# 第二步:创建数据存储目录
mkdir -p /data/3356/data
chown -R mysql. /data/3356/data

# 第三步:进行初始化操作
/usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56/ --datadir=/data/3356/data

# 报错:
2024-04-16 21:14:55 1925 [ERROR] /usr/local/mysql56//bin/mysqld: unknown variable 'mysqlx=0'
2024-04-16 21:14:55 1925 [ERROR] Aborting
[root@db01 local]# mv /etc/my.cnf /etc/my80.cnf
[root@db01 local]# rm -rf /data/3356/data/*
[root@db01 local]# /usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56/ --datadir=/data/3356/data

# 第四步:编写配置文件
vim /etc/my56.cnf
[mysql]
socket=/tmp/mysql.sock

[mysqld]
user=mysql
basedir=/usr/local/mysql56/
datadir=/data/3356/data
socket=/tmp/mysql.sock

# 第五步:启动数据库服务
vim /etc/systemd/system/mysqld56.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql56/bin/mysqld --defaults-file=/etc/my56.cnf
LimitNOFILE = 5000

systemctl daemon-reload
systemctl start mysqld56

安装部署5.7

# 第一步:上传程序压缩包/并进行解压
cd /usr/local/
mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
tar xf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.7.30-linux-glibc2.12-x86_64 mysql57

# 第二步:创建数据存储目录
mkdir -p /data/3357/data
chown -R mysql. /data/3357/data

#第三步:进行初始化操作
/usr/local/mysql57/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57/ --datadir=/data/3357/data

# 第四步:编写配置文件
vim /etc/my57.cnf
[mysql]
socket=/tmp/mysql.sock

[mysqld]
user=mysql
basedir=/usr/local/mysql57/
datadir=/data/3357/data
socket=/tmp/mysql.sock

# 第五步:启动数据库服务
vim /etc/systemd/system/mysqld57.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/etc/my57.cnf
LimitNOFILE = 5000

systemctl daemon-reload
systemctl start mysqld57

1、数据库服务连接管理

1)连接管理方式

  • 本地连接:unix 套接字 配置文件中:socket=/tmp/mysql.sock

​ PS:利用套接字文件,可以实现在一个系统中,不同的程序可以建立连接

  • 远程连接:socket(网络开发) —> TCP/IP —> IP地址 端口信息

2)连接管理方法

  • 利用数据库自带的客户端命令实现连接

​ 本地连接:mysql -uroot -p123 -S /tmp/mysql.socket

​ 远程连接:mysql -uroot -p123 -h10.0.0.51 -P3306

  • 利用第三方数据库管理工具实现连接

​ 远程连接:可以使用的远程工具(sqlyog、navicat、workbench(官方)、dbserver)

  • 利用开发程序接口或函数,以及驱动程序包连接数据

​ PHP - 代码test_mysql.php - 数据库建立连接

​ 注册效果:

​ 第一步:部署NMP环境(Windows)

​ phpstudy

​ 第二步:编写连接数据库注册代码

​ 创建库和表信息

create database oldboy;
use oldboy
CREATE TABLE users (
    id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username varchar(30),
    password varchar(60),
    createtime int(16) not null,
    createip binary(16)
);

login.php

  • 程序代码操作连接登录数据库服务:
序号开发语言连接数据库驱动程序
01python连接数据库驱动-pymysql
02golang连接数据库驱动-gomysql
03java连接数据库驱动-jar
04php连接数据库驱动-phpmysql

不同语言程序代码连接数据库服务驱动:https://dev.mysql.com/downloads/

2、数据库服务应用配置

2.1 服务进行配置有什么作用?

1)实现服务运行启动

2)实现某些功能作用

2.2 应用配置有三种方式:

1)利用编译安装过程实现配置

2)编写配置文件信息

# 默认配置文件:/et/my.ini
mysqld --help --verbose|grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 
-- 数据库服务加载配置文件顺序:
-- /etc/my.cnf -->  /etc/mysql/my.cnf --> /usr/local/mysql/etc/my.cnf --> ~/.my.cnf

问题?:如果my.cnf文件放置在了/data/3306/data/my.cnf如何加载?

配置文件内容:

[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql80
datadir=/data/3306/data
socket=/tmp/mysql.sock

升级:程序升级 数据结构变 数据内容不变

有 [ ] 部分,表示对客户端或服务端配置区域

客户端:[mysql] [mysqldump] – [client] 集合汇总

没 [ ] 部分,表示具体的配置参数信息

服务端:[mysqld] [mysqld_safe] – [server] 集合汇总

启动数据库服务程序,为什么会有两个进程信息?

一个是mysqld_safe

另一个是mysqld

简单说明:从进程管理知识分析

mysql_safe 父进程:接收任务信息

mysqld 子进程:处理任务信息 核心

知识点补充:数据库服务启动与关闭管理

运行mysqld命令 --> 产生了mysqld进程信息 --> 服务启动(不能负责关闭和重启)

mysqld命令文件 无法灵活调整

运行mysqld_safe命令 --> 产生了mysqld_safe进程信息 --> 服务启动 停止 重启

mysqld_safe脚本文件 可以根据需求灵活调整 实现不同启动 重启 停止效果

systemctl --> /etc/init.d/mysqld --> mysqld_safe --> mysqld

service --> /etc/init.d/mysqld --> mysqld_safe --> mysqld

PS:掌握数据库启动和停止方法原理

数据库服务启动和关闭方式总结:

序号启动方式关闭方式
01mysqld &kill/pkill/killall (不建议) kill -9 禁用
02mysqld_safe &kill/pkill/killall (不建议)
03mysql.server startmysql.server stop
04service mysqld start (建议)service mysqld stop (建议)
05systemctl start mysqldsystemctl stop mysqld
06> shutdown
07mysqladmin -uroot -poldboy123 shutdown

3)利用启动命令参数实现配置功能

mysqld_safe --skip-grant-tables --skip-networking &

3、数据库服务多实例构建

什么是多实例:多个服务同时启动 跑不同业务,互相独立

多实例概述:一般在一个系统环境中,可以运行多个相同的服务程序信息,并且产生不同的进程和网络端口信息,就可以称为多实例概念;

多实例作用:充分利用硬件资源

构建多实例:

步骤一:多实例部署环境规划

多个实例规划 端口规划 数据目录规划 配置文件规划 套接字文件规划

实例信息编号实例服务端口实例存储路径实例配置文件套接字文件
mysql-01端口信息:3307/data/3307/data/data/3307/data/my.cnf/tmp/mysql3307.sock
mysql-02端口信息:3308/data/3308/data/data/3308/data/my.cnf/tmp/mysql3308.sock
mysql-03端口信息:3309/data/3309/data/data/3309/data/my.cnf/tmp/mysql3309.sock

步骤二:多实例部署环境准备(数据目录创建)

[root@db01 ~]# mkdir -p /data/330{7..9}/data
[root@db01 ~]# chown -R mysql. /data/*

步骤三:多实例初始数据信息

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data

PS:将默认配置文件移走

步骤四:多实例配置文件编写

[root@xiaoQ-01 ~]# vim /data/3307/data/my.cnf
[mysql]
socket=/tmp/mysql3307.sock
[mysqld]
user=mysql
port=3307
basedir=/usr/local/mysql
datadir=/data/3307/data
socket=/tmp/mysql3307.sock

[root@xiaoQ-01 ~]# vim /data/3308/data/my.cnf
[mysql]
socket=/tmp/mysql3308.sock
[mysqld]
user=mysql
port=3308
basedir=/usr/local/mysql
datadir=/data/3308/data
socket=/tmp/mysql3308.sock

[root@xiaoQ-01 ~]# vim /data/3309/data/my.cnf
[mysql]
socket=/tmp/mysql3309.sock
[mysqld]
user=mysql
port=3309
basedir=/usr/local/mysql
datadir=/data/3309/data
socket=/tmp/mysql3309.sock

步骤五:多实例服务运行启动

[root@xiaoQ-01 ~]# mysqld_safe --defaults-file=/data/3307/data/my.cnf &
[root@xiaoQ-01 ~]# mysqld_safe --defaults-file=/data/3308/data/my.cnf &
[root@xiaoQ-01 ~]# mysqld_safe --defaults-file=/data/3309/data/my.cnf &

步骤六:多实例服务端口查看

[root@db01 local]# mysql -S /tmp/mysql3307.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like '%port%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| admin_port               | 33062 |
| large_files_support      | ON    |
| mysqlx_port              | 33060 |
| mysqlx_port_open_timeout | 0     |
| port                     | 3307  |
| report_host              |       |
| report_password          |       |
| report_port              | 3307  |
| report_user              |       |
| require_secure_transport | OFF   |
+--------------------------+-------+
10 rows in set (0.02 sec)
mysql> select @@port;
+--------+
| @@port |
+--------+
|   3307 |
+--------+
1 row in set (0.00 sec)

[root@db01 local]# mysql --defaults-file=/data/3307/data/my.cnf
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

[root@db01 local]# ss -lntup|grep mysqld
tcp    LISTEN     0      70     [::]:33060              [::]:*                   users:(("mysqld",pid=2487,fd=21))
tcp    LISTEN     0      151    [::]:3307               [::]:*                   users:(("mysqld",pid=2487,fd=24))
tcp    LISTEN     0      151    [::]:3308               [::]:*                   users:(("mysqld",pid=2661,fd=22))
tcp    LISTEN     0      151    [::]:3309               [::]:*                   users:(("mysqld",pid=2833,fd=22))

4、数据库服务版本升级

实现程序功能升级,升级过程中:

1)不能影响数据信息

2)不能影响业务使用

4.1 实现升级的方法:

1)本地升级:单台服务器升级(Inplace-就地)

2)迁移升级:多台服务器升级(Mergeing-迁移)推荐 主从结构、数据备份、恢复

注意事项:

  • 数据库服务小版本升级 5.6.1 5.6.2 5.6.3 5.6.40 5.7
  • 数据库服务大版本升级 5.6.40 5.7

PS:大版本升级,是不能跨版本的:https://dev.mysql.com/doc/refman/8.0/en/upgrade-paths.html

4.2 常见的数据库服务程序升级方式:

方式升级说明备注说明
单台服务器升级(Inplace-就地数据库服务小版本升级比如:5.7.20 ->5.7.22
(风险较大)数据库服务大版本升级比如:5.7.20 ->5.8.20
迁移服务器升级(Mergeing-迁移)数据库服务小版本升级安装新版本数据库服务(备份迁移/主从迁移)
(需要迁移数据)数据库服务大版本升级安装新版本数据库服务(备份迁移/主从迁移)

说明:数据库服务升级时,不管哪个方式升级,都应该先做好数据备份,方便升级失败的回退。

4.3 数据库服务升级注意事项

  • 数据库服务版本升级时,只支持在GA(General Availability)版本之间进行升级
  • 数据库服务版本升级时,支持从数据库5.6到5.7再到8.0,跨版本升级,但是需要先将5.6升级到最新小版本,在进行跨版本升级
  • 数据库服务版本升级时,需要提前考虑好版本回退的方案,最好升级前做好数据备份(特别是向8.0版本升级)
  • 数据库服务版本升级时,制定的升级方案和升级步骤,需要尽可能降低数据库服务停机的时间

4.4 数据库服务升级过程规划(Inplace)

  • 数据库服务数据备份保存(可以采用热备和冷备两种方案,冷备是需要停止业务后备份,热备是无需停止业务备份)
  • 数据库服务最新程序安装(最新版本数据库服务安装过程时,无需停止原有数据库旧版服务)
  • 数据库服务原有程序关闭(网站显示维护页面)
  • 数据库服务最新程序启动(加载原有程序数据实现挂库升级,并采用跳过授权表和跳过网络方式启动)
  • 数据库服务升级数据结构(数据库服务升级程序后,还需要升级数据系统结构信息,因此升级时间和数据量无关)
  • 数据库服务可以正常重启(数据库服务升级完毕后,确认数据库服务是可以正常完成重启操作)
  • 数据库服务功能测试验证(反复核实验证与数据库服务相关的各项功能是否正常)
  • 数据库服务升级工作完毕(取消网站维护页面,恢复正常网站线上运营业务)

4.5 数据库服务升级过程实战

4.5.1 企业数据库实战练习一:演示5.6.48 ->5.7.30 本地升级

数据库版本升级步骤一:数据库服务最新程序安装

[root@db01 local]# ll -d mysql-5.7.30-linux-glibc2.12-x86_64
drwxr-xr-x 9 root root 129 2024-07-26 11:32 mysql-5.7.30-linux-glibc2.12-x86_64

数据库版本升级步骤二:数据库服务原有程序关闭

[root@db01 local]# systemctl stop mysqld56.service 
# 补充:尽量选择平滑关闭数据库服务
[root@xiaoQ-01 local]# vim /data/3356/my.cnf
innodb_fast_shutdown=0 
-- 企业实战环境,需要添加此配置参数信息在配置文件中,实现优雅关闭数据库服务
[root@xiaoQ-01 local]# systemctl stop mysqld3356
-- 配置文件加入以上参数后,此时关闭数据库服务,会采用优雅关闭服务,而不是采用快速关闭数据库服务方式

数据库版本升级步骤三:数据库服务最新程序启动

实现挂库信息配置,然后跳过授权表和网络方式启动

# 修改旧版本数据库服务配置文件,使用新版本程序加载原有数据库中数据目录
[root@db01 local]# cat /etc/my57.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql57/
datadir=/data/3356/data
socket=/tmp/mysql.sock
innodb_fast_shutdown=0

[root@db01 local]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/etc/my57.cnf --skip-grant-tables --skip-networking &

[root@db01 local]# ps -ef|grep mysql
root       2495   1168  0 19:27 pts/0    00:00:00 /bin/sh /usr/local/mysql57/bin/mysqld_safe --defaults-file=/etc/my57.cnf --skip-grant-tables --skip-networking
mysql      2649   2495  1 19:27 pts/0    00:00:01 /usr/local/mysql57/bin/mysqld --defaults-file=/etc/my57.cnf --basedir=/usr/local/mysql57/ --datadir=/data/3356/data --plugin-dir=/usr/local/mysql57//lib/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=db01.err --pid-file=db01.pid --socket=/tmp/mysql.sock
root       2680   1168  0 19:29 pts/0    00:00:00 grep --color=auto mysql

数据库版本升级步骤四:数据库服务升级数据结构

[root@db01 local]# /usr/local/mysql57/bin/mysql_upgrade -S /tmp/mysql.sock --force
...省略部分信息...
Upgrade process completed successfully.
Checking if update is needed.
-- 显示以上信息内容,表述数据库中数据结构信息升级成功

数据库版本升级步骤五:数据库服务重启正常状态

[root@db01 local]# pkill mysql
[root@db01 local]# systemctl start mysqld57.service

说明:在数据库版本从5.7升级到8.0时,可以省略mysql_upgrade升级改变数据结构信息操作,因为8.0版本会自动完成此步骤

4.5.2 企业数据库实战练习二:演示5.7.30 ->8.0.20本地升级)

数据库版本升级步骤一:数据库服务最新程序安装

# 数据库服务具体安装过程省略,通过查看服务程序目录信息确认是否安装完毕
[root@db01 local]# ll -d mysql-8.0.26-linux-glibc2.12-x86_64
drwxr-xr-x 9 root root 129 2024-07-24 15:49 mysql-8.0.26-linux-glibc2.12-x86_64

数据库版本升级步骤二:数据库服务原有程序关闭

[root@db01 local]# systemctl stop mysqld57.service 
vim /data/3357/my.cnf
innodb_fast_shutdown=0
-- 企业实战环境,需要添加此配置参数信息在配置文件中,实现优雅关闭数据库服务
或者
> set global innodb_fast_shutdown=0
> select @@innodb_fast_shutdown
-- 连接进入旧版本数据库中,直接设置数据库服务功能参数信息,使之立即生效
[root@xiaoQ-01 local]# systemctl stop mysqld57
-- 配置文件加入以上参数后,此时关闭数据库服务,会采用优雅关闭服务,而不是采用快速关闭数据库服务方式

[root@db01 local]# ps -ef|grep mysql
root       2820   1168  0 19:43 pts/0    00:00:00 grep --color=auto mysql

数据库版本升级步骤三:数据库服务最新程序启动

# 修改旧版本数据库服务配置文件,使用新版本程序加载原有数据库中数据目录
[root@db01 local]# cat /etc/my57.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql/
datadir=/data/3356/data
socket=/tmp/mysql.sock
innodb_fast_shutdown=0

# 利用命令脚本文件测试启动新版本数据库程序服务
[root@db01 local]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my57.cnf --skip-grant-tables --skip-networking &

# 查看数据库服务启动进程信息
[root@db01 local]# ps -ef|grep mysqld
-- 此时数据库服务启动成功后,只会显示进程信息,不会显示网络端口信息

数据库版本升级步骤四:数据库服务升级数据结构 (此步骤可省略)

说明:在数据库版本从5.7升级到8.0时,可以省略mysql_upgrade升级改变数据结构信息操作,因为8.0版本会自动完成此步骤

数据库版本升级步骤五:数据库服务重启正常状态

[root@db01 local]# pkill mysql
[root@db01 local]# vim /etc/systemd/system/mysqld.service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my57.cnf
-- 修改此配置信息,将原有数据库服务启动文件中程序目录修改为新版本数据库服务程序目录

[root@db01 local]# systemctl daemon-reload 
[root@db01 local]# systemctl start mysqld.service 

[root@db01 local]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| oldboy             |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from oldboy.stu;
+---------+------+--------+
| name    | age  | gender |
+---------+------+--------+
| oldboy  |   20 | m      |
| oldgirl |   25 | f      |
| oldbaby |   10 | m      |
+---------+------+--------+
3 rows in set (0.00 sec)

4.6 数据库服务升级回滚实践

4.6.1 数据库服务升级失败,如何回滚操作:大版本回滚

数据库版本回滚步骤一:数据库服务编写回滚文件

[root@db01 ~]# cp -a /data/3357/ /data/3357_backup
[root@db01 ~]# vim /data/3357/my_rollback.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3357_backup/data
-- 升级前做的旧版本冷备数据
socket=/tmp/mysql.sock
innodb_fast_shutdown=0

数据库版本回滚步骤二:数据库服务重新回退启动

[root@db01 ~]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3356/my_rollback.cnf &

4.6.2 企业数据库实战练习二:跨小版本回滚

数据库服务官方参考链接:https://dev.mysql.com/doc/refman/5.7/en/downgrading.html

说明:对于数据库8.0版本是不支持小版本间与大版本间的回滚的,只能采取恢复升级前数据方案。

5.7.10 – 8.0.26 升级失败 — 回滚

5.7.12 – 8.0.26 升级失败 — 回滚

解决问题

5.7.12 – 8.0.26 升级失败 — 回滚

4.7 数据库服务升级版本确认

在早期升级数据服务程序时,很多企业环境升级过程,都需要有前期的模拟测试环节,并且测试环境的版本升级兼容性需要盲猜;

根本无法通过当前环境的数据库服务版本,来核实确认是否可以进行升级的兼容性版本信息,从而有效避免升级后带来的问题;

而在数据库服务8.0之后,提供了一个mysqlshell命令功能,利用命令功能中的特殊函数,可以在升级前对当前环境版本进行验证;

在升级前,对原有的数据库服务进行检测:

简而言之:就是数据库服务8.0之后,利用mysqlshell中的函数,可以实现数据库服务升级的预检查功能

安装应用mysql shell工具步骤

步骤一:上传解压8.0版本数据库mysql shell功能程序

[root@db01 local]# tar xf mysql-shell-8.0.26-linux-glibc2.12-x86-64bit.tar.gz
[root@db01 local]# ln -s mysql-shell-8.0.26-linux-glibc2.12-x86-64bit mysqlsh

步骤二:使用工具进行测试

# 确认当前5.7版本信息是否可以升级到相应的8.0版本
[root@db01 local]# cd mysqlsh/bin/
[root@db01 bin]# ll
总用量 40152
-rwxr-xr-x 1 7161 31415  7868984 2021-06-11 07:05 mysql-secret-store-login-path
-rwxr-xr-x 1 7161 31415 33241904 2021-06-11 07:04 mysqlsh

[root@db01 bin]# ./mysqlsh root:123456@10.0.0.51:3306 -e "util.checkForServerUpgrade()"
# 提前在旧版本数据库中,创建测试用户
mysql> create user root@'%' identified by '123456';
mysql> grant all on *.* to root@'%';

[root@db01 bin]# ./mysqlsh root:123456@10.0.0.51:3306 -e "util.checkForServerUpgrade()"
WARNING: Using a password on the command line interface can be insecure.
The MySQL server at 10.0.0.51:3306, version 5.7.30 - MySQL Community Server
(GPL), will now be checked for compatibility issues for upgrade to MySQL
8.0.26...

1) Usage of old temporal type
  No issues found

2) Usage of db objects with names conflicting with new reserved keywords
  No issues found

3) Usage of utf8mb3 charset
  No issues found

4) Table names in the mysql schema conflicting with new tables in 8.0
  No issues found

5) Partitioned tables using engines with non native partitioning
  No issues found

6) Foreign key constraint names longer than 64 characters
  No issues found

7) Usage of obsolete MAXDB sql_mode flag
  No issues found

8) Usage of obsolete sql_mode flags
  Notice: The following DB objects have obsolete options persisted for
    sql_mode, which will be cleared during upgrade to 8.0.
  More information:
    https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals

  global system variable sql_mode - defined using obsolete NO_AUTO_CREATE_USER
    option

9) ENUM/SET column definitions containing elements longer than 255 characters
  No issues found

10) Usage of partitioned tables in shared tablespaces
  No issues found

11) Circular directory references in tablespace data file paths
  No issues found

12) Usage of removed functions
  No issues found

13) Usage of removed GROUP BY ASC/DESC syntax
  No issues found

14) Removed system variables for error logging to the system log configuration
  To run this check requires full path to MySQL server configuration file to be specified at 'configPath' key of options dictionary
  More information:
    https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-logging

15) Removed system variables
  To run this check requires full path to MySQL server configuration file to be specified at 'configPath' key of options dictionary
  More information:
    https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.html#optvars-removed

16) System variables with new default values
  To run this check requires full path to MySQL server configuration file to be specified at 'configPath' key of options dictionary
  More information:
    https://mysqlserverteam.com/new-defaults-in-mysql-8-0/

17) Zero Date, Datetime, and Timestamp values
  No issues found

18) Schema inconsistencies resulting from file removal or corruption
  No issues found

19) Tables recognized by InnoDB that belong to a different engine
  No issues found

20) Issues reported by 'check table x for upgrade' command
  No issues found

21) New default authentication plugin considerations
  Warning: The new default authentication plugin 'caching_sha2_password' offers
    more secure password hashing than previously used 'mysql_native_password'
    (and consequent improved client connection authentication). However, it also
    has compatibility implications that may affect existing MySQL installations. 
    If your MySQL installation must serve pre-8.0 clients and you encounter
    compatibility issues after upgrading, the simplest way to address those
    issues is to reconfigure the server to revert to the previous default
    authentication plugin (mysql_native_password). For example, use these lines
    in the server option file:
    
    [mysqld]
    default_authentication_plugin=mysql_native_password
    
    However, the setting should be viewed as temporary, not as a long term or
    permanent solution, because it causes new accounts created with the setting
    in effect to forego the improved authentication security.
    If you are using replication please take time to understand how the
    authentication plugin changes may impact you.
  More information:
    https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues
    https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication

Errors:   0
Warnings: 1
Notices:  1

No fatal errors were found that would prevent an upgrade, but some potential issues were detected. Please ensure that the reported issues are not significant before upgrading.
# PS:有错误就不能升级 

5、数据库服务工作模型

数据服务工作模型:属于C/S架构模型 客户端 – 服务端

1673282572894

6、数据库服务实例构成

数据库服务实例就是程序运行工作的一种方式,会占用一定的内存资源和CPU资源,并且会派生出多个线程完成不同的任务需求;

MySQL实例 = mysqld + master thread监控管理 + 具体干活的thread + 预分配的内存结构

简单来说:mysql实例就是占用内存资源的统称,利用mysql实例可以对数据进行处理;

实例工作示意图:

1667103513248【轻松网赚网 thbcm.com】

7、数据库服务程序结构

数据库服务体系结构总览:

增 删 改 查 – 执行时候效率(系统硬件性能 资源消耗少-性能高 IO CPU 内存 )

1)客户端程序部分 (自带客户端 第三方 开发程序)

2)服务端程序部分 (server层 处理用户请求)

3)数据存储引擎部分 (负责管理磁盘-逻辑性 – 实现数据调取和存储)

内核 – 硬件 – 磁盘

select user,host from mysql.user – 命令执行过程 – 接收命令 – ? – 返回结果

08 数据库服务语句分类
09 数据库服务字符设置

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

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

相关文章

【深入理解SpringCloud微服务】手写实现断路器算法

【深入理解SpringCloud微服务】手写实现断路器算法 断路器状态切换断路器接口断路器算法实现相关属性failed()success()canPass() 断路器状态切换 在分析断路器算法前,我们先复习一下断路器的状态转换。 断路器一般有三个状态:关闭、打开、半开。 断路…

【瑞昱RTL8763E】歌曲传输

1 概要 Watch 端 SD 卡中的歌曲除了可以通过 USB 传输,还可以通过 SPP/BLE 传输来完成歌曲的添加与删 除操作。其中,Android 手机可以安装 LocalPlayback.apk 使用 SPP 协议与 watch 交互;iOS 手机可以安装 LocalPlayback.ipa 通过 BLE 与 wa…

Python 工具库每日推荐 【Matplotlib】

文章目录 引言Python数据可视化库的重要性今日推荐:Matplotlib工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:数据分析可视化案例分析高级特性自定义样式动画效果3D绘图性能优化技巧扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 T…

【可答疑】基于51单片机的无线病床呼叫系统(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…

什么是虚拟化?| 裸机 vs 虚拟机 vs 容器

“云计算!DevOps!Docker!Kubernetes!……” 如果您是一名软件工程师,还没有遇到过以上这些流行词,那么您可能一直生活在与世隔绝的地方。 所有这些技术都与同一样东西有关,对,就是…

openEuler 24.03 (LTS) 部署 K8s(v1.31.1) 高可用集群(Kubespray Ansible 方式)

写在前面 实验需要一个 CNI 为 flannel 的 K8s 集群之前有一个 calico 的版本有些旧了,所以国庆部署了一个v1.31.1 版本 3 * master 5 * work时间关系直接用的工具 kubespray博文内容为部署过程以及一些躺坑分享需要科学上网理解不足小伙伴帮忙指正 😃,生活加油 99…

IEC104规约的秘密之七----配置参数t1,t2,t3

104通讯前需要配置通讯参数,一般有如下参数: IP地址,端口号,k,w,t1,t2,t3,公共地址,遥控超时参数,104主规约还有一个t0参数。 本次只讲解t1&#…

2-113 基于matlab的图像的配准融合

基于matlab的图像的配准融合,采用互信息配准,PV差值,powell算法,小波变换的图像融合算法。在GUI界面输入两幅图像,完成图像的配准融合。融合图像要求像素 一样。程序代码已经有详细的注释。程序已调通,可直…

对操作系统中的用户态和内核态的理解

目录 引言 为什么要有用户态和内核态?只有一个内核态不行么? 一、用户态(User Mode) 定义 特点 应用 二、内核态(Kernel Mode) 定义 特点 应用 三、用户态与内核态的联系和区别 四、用户态和内…

通过dem2terrain生成MapboxGL地形服务

概述 MapboxGL在2的版本之后通过地形服务开始支持三维的展示了,之前也有文章“mapboxGL2中Terrain的离线化应用”对该服务进行过说明与分析。前些天在翻公众号的时候翻到了dem2terrain可以生成地形服务,同时做了一些优化,今天就给大家分享一…

2024全面升级!从零开始的大模型开发学习路线图——精通之路

第一阶段:基础理论入门 目标:了解大模型的基本概念和背景。 内容: 人工智能演进与大模型兴起。 大模型定义及通用人工智能定义。 GPT模型的发展历程。 第二阶段:核心技术解析 目标:深入学习大模型的关键技术和工…

多文件并发多线程MD5工具(相对快速的MD5一批文件),适配自定义MD5 Hash I/O缓存。

自己写的多文件 MD5校验工具,一个文件开一个线程,有最大I/O 缓存设置,兼容读写MD5后缀文件。 共计91个文件,合计180G左右 12分钟左右,UI基本卡废,但程序没蹦,属于正常。 卡的原因是基本是用 I/O…

每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java

目录 牛客_牛牛冲钻五_模拟 题目解析 C代码 Java代码 牛客_牛牛冲钻五_模拟 牛牛冲钻五 (nowcoder.com) 描述: 牛牛最近在玩炉石传说,这是一款一对一对战的卡牌游戏,牛牛打算努力冲上钻五分段,获得丰厚的天梯奖励。…

力扣 中等 78.子集

文章目录 题目介绍解法解法一&#xff1a;解法二&#xff1a; 题目介绍 解法 有两种解法&#xff0c;对于计算[1,2]的子集问题&#xff1a; 解法一&#xff1a; 站在输入的角度思考&#xff1a;每个元素都可以选/不选 代码如下&#xff1a; class Solution {List<List&…

ReGCL Rethinking Message Passingin Graph Contrastive Learning

AAAI24 推荐指数&#xff1a; #paper/⭐ 总体说&#xff1a;利用梯度对对比正负样本加权的。个人觉得和与正负样本加权没有区别&#xff0c;读完之后不想做笔记了。

成都睿明智科技有限公司真实可靠吗?

在这个日新月异的电商时代&#xff0c;抖音作为短视频与直播电商的佼佼者&#xff0c;正以前所未有的速度重塑着消费者的购物习惯。而在这片充满机遇与挑战的蓝海中&#xff0c;成都睿明智科技有限公司以其独到的眼光和专业的服务&#xff0c;成为了众多商家信赖的合作伙伴。今…

RAG再总结之如何使大模型更好使用外部数据:四个不同层级及查询-文档对齐策略

我们来看看RAG进展。《Retrieval Augmented Generation (RAG) and Beyond: A Comprehensive Survey on How to Make your LLMs use External Data More Wisely》(https://arxiv.org/abs/2409.14924)&#xff0c;主要讨论了如何使大型语言模型&#xff08;LLMs&#xff09;更明智…

【Canvas与标志】白座红芯辐射标志

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>白座红芯辐射标志</title><style type"text/css"…

23.1 k8s监控中标签relabel的应用和原理

本节重点介绍 : relabel的源码在 7.7节做过详细的解读强大的relabel能力 在k8s中的应用 应用1&#xff1a; labelmap 在采集cadvisor指标时 对服务发现标签key名字截取应用2&#xff1a; 采集pod自定义指标中replace 和 keep的应用应用3&#xff1a; k8s服务组件采集时的endpo…

资产管理系统建设方案,资产盘点,rfid,出入库,消耗品管理,系统方案,系统源码(word原件)

固定资产管理系统需求要点&#xff1a; 1. 实现公司内部固定资产管理全生命周期管理&#xff0c;包括资产采购、资产入库、资产领用、资产借用、资产归还、资产报废、资产维修、资产调拨等全过程管理。 2. 可实现集团内部固定资产盘点管理&#xff0c;包括盘点计划、盘点查询等…