当前位置: 首页 >数据库 > MySQL之2---基础管理

MySQL之2---基础管理

MySQL之2---基础管理

一、用户管理

作用:登录数据库,管理数据库对象

格式

mysql用户账号由两部分组成:

'USERNAME'@'HOST‘

HOST说明:

  • 限制此用户可通过哪些远程主机连接mysql服务器
  • 支持使用通配符:
% 匹配任意长度的任意字符172.16.0.0/255.255.0.0 或 172.16.%.%_ 匹配任意单个字符
示例:'root'@'localhost‘本地用户'root'@'db02‘单一IP用户'root'@'10.0.0.2‘单一IP用户'root'@'10.0.0.%‘范围IP用户'root'@'10.0.0.5%‘范围IP用户'root'@'10.0.0.0/255.255.254.0‘  范围IP用户'root'@'%‘范围IP用户

不指定@'HOST‘默认@'%‘

  • 匹配优先级:

MySQL之2---基础管理 _ JavaClub全栈架构师技术笔记

安全规范:

a. 尽量小, 最好细化到单一IP, 不能使用%

b. 用户名有特点

c. 无用的用户要删除(5.7以前)或者锁定

d. 密码超过三种复杂度, 12位以上

操作命令

创建用户和密码

create user 'USERNAME'@'HOST' identified by 'PASSWORD';

8.0新特性:

  1. 8.0 之后语句变化, grant不再支持创建用户和修改密码的功能, 不能

    grant all on *.* to wordpress@'10.0.0.%' identified by '123';

    权限和用户分开管理

    必须先创建用户再授权

    create user 'wordpress'@'10.0.0.%' identified by '123';grant all on *.* to wordpress@'10.0.0.%';
  2. 8.0 之前使用的密码插件是mysql_native_password

    8.0 之后使用的密码插件是caching_sha2_password

    导致问题: 老的客户端程序, 连接不了8.0版本

    解决方法:

    • 创建用户时指定密码加密插件为mysql_native_password
    create user wordpress@'10.0.0.%' identified with mysql_native_password by '123';
    • 修改用户时替换密码加密插件为mysql_native_password
    alter user wordpress@'10.0.0.%' identified with mysql_native_password by '123';
    • 配置文件中指定默认加密插件为mysql_native_password

修改用户

alter user wordpress@'10.0.0.%' identified by '123';

锁定用户

alter user wordpress@'10.0.0.%' account lock;

解锁用户

alter user wordpress@'10.0.0.%' account unlock;

删除用户

drop user wordpress@'10.0.0.%';

获取数据表结构

desc mysql.user;

查询所有mysql用户

select user,host,authentication_string,plugin from mysql.user;

设置别名as ""

select user as "用户",host as "白名单",authentication_string as "密码",plugin as "插件" from mysql.user;

查看帮助

? 或者 help

查看创建用户帮助

help create user;

生产中开用户

  1. 如何沟通开用户
    1.是否有邮件批复
    2.对哪些库和表做操作
    3.做什么操作(增删改查)
    4.从什么地址来登录
  2. 开发人员找你要root用户密码?
    1.走流程拒绝他
    2.如果是金融类的公司
    (1)原则上是不允许任何非DBA人员持有或申请root
    (2)如果有人私下索要root密码,即时举报。

三、权限管理

作用:约束用户能够对数据库对象(库, 表)使用的功能(SQL)

语法格式

grant 权限 on 权限范围 to 用户;

权限范围

  • 对于数据库及内部其他权限
*.*       全局范围, 所有数据库数据库名.*        单库范围, 指定数据库中的所有数据库名.表        单表范围, 指定数据库中的某张表数据库名.存储过程     指定数据库中的存储过程
  • 对于用户和IP的权限
用户名@IP地址      用户只能在该IP下才能访问用户名@192.168.1.%用户只能在该IP段下才能访问(通配符%表示任意)用户名@% 用户可以再任意IP下访问(默认IP地址为%)

权限列表

查看所有权限列表

show privileges;
all:除 Grant option 外的所有权限alter:使用alter tablealter routine:使用alter procedure和drop procedurecreate:使用create tablecreate routine:使用create procedurecreate temporary tables:使用create temporary tablescreate user:使用create user、drop user、rename user和revoke  all privilegescreate view:使用create viewdelete:使用deletedrop:使用drop tableexecute:使用call和存储过程file:使用select into outfile 和 load data infilegrant option:使用grant 和 revokeindex:使用indexinsert:使用insertlock tables:使用lock tableprocess:使用show full processlistselect:使用selectshow databases:使用show databasesshow view:使用show viewupdate:使用updateusage:无权限-仅允许连接reload:使用flushshutdown:使用mysqladmin shutdown(关闭MySQL)super:使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆replication client:服务器位置的访问replication slave:由复制从属使用... ...

权限类别

管理类

CREATE TEMPORARY TABLESCREATE USERFILESUPERSHOW DATABASESRELOADSHUTDOWNREPLICATION SLAVEREPLICATION CLIENTLOCK TABLESPROCESS

程序类: FUNCTION、PROCEDURE、TRIGGER

CREATEALTERDROPEXCUTE

库和表级别:DATABASE、TABLE

ALTERCREATECREATE VIEWDROPINDEXSHOW VIEWGRANT OPTION:能将自己获得的权限转赠给其他用户

数据操作

SELECTINSERTDELETEUPDATE

字段级别

SELECT(col1,col2,...)UPDATE(col1,col2,...)INSERT(col1,col2,...)

所有权限

ALL PRIVILEGES 或 ALL

注意:

① MariaDB 服务进程启动时会读取mysql 库中所有授权表至内存

② GRANT 或 REVOKE 等执行权限操作会保存于系统表中,MariaDB 的服务进程通常会自动重读授权表,使之生效

③ 对于不能够或不能及时重读授权表的命令,可手动让MariaDB 的服务进程重读授权表:FLUSH PRIVILEGES;

操作命令

① 授权

grant 权限 on 数据库.表 to '用户'@'IP地址';

不能重复授权, 重复授权会追加而不是覆盖

② 取消授权(回收权限)

revoke 权限 on 数据库.表 from '用户名'@'IP地址';

③ 查看用户权限

  • 专用命令
show grants for '用户'@'IP地址';
  • 查看授权表
select * from mysql.user \G;

注意:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

加载mysql库use mysql;查看表名show tables;user: user host auth plugin 全局范围授权的用户权限  (*.*)db  : user host auth plugin 单库范围授权的用户权限  (wp_user.*)table_priv  : user host auth plugin 单表范围授权的用户权限  (wp_user.d1)

示例

create user root@'10.0.0.%' identified with mysql_native_password by '123';grant all on *.* to root@'10.0.0.%';create user wp_user@'10.0.0.%' identified with mysql_native_password by '123';grant select,update,delete,insert on wordpress.* to  wp_user@'10.0.0.%';revoke delete on *.* to wp_user@'10.0.0.%';

8.0 新特性

角色 role

创建角色

create role app_rw;

给角色授权

grant select,update,delete,insert on wordpress.* to app_rw;

创建用户

create user test@'10.0.0.%' identified by '123';

给用户授权

grant app_rw to test@'10.0.0.%';

查看当前登录用户所属角色

select * from information_schema.APPLICABLE_ROLES;

删除角色

drop role app_rw;

删除用户

drop user test@'10.0.0.%';

本地管理员( root@localhost 用户)

管理员密码设定(root@localhost)

[root@db01 ~]# mysqladmin password 1 # 设置密码为: 1[root@db01 ~]# mysqladmin -uroot -p password 123 # 修改密码为: 123Enter password:  # 输入旧密码: 1

本地管理员 root@localhost 用户 忘记密码(误删除\误修改)

  1. 关闭数据库
[root@db01 ~]# systemctl stop mysqld
  1. 维护模式启动数据库
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
--skip-grant-tables  # 跳过授权表--skip-networking# 跳过远程登录
vim /etc/my.cnf[mysqld]skip-grant-tables=1skip-networking=1

skip-networking=1:关闭TCP/IP网络连接,只侦听本地客户端, 所有和服务器的交互都通过一个socket实现,socket的yum安装默认存放在/var/lib/mysql/mysql.sock

1,ON,TRUE,启用意义相同0,OFF,FALSE,关闭意义相同_和-相同
  1. 登录并修改密码
[root@db01 ~]# mysqlmysql> alter user root@'localhost' identified by '1';ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statementmysql> flush privileges;mysql> alter user root@'localhost' identified by '1';Query OK, 0 rows affected (0.01 sec)mysql> exit

如果 root@localhost 用户 (误删除\误修改) 不存在

误修改改回来就行

[root@db01 ~]# mysqlmysql> select user,host from mysql.user;+------------------+-----------+| user | host  |+------------------+-----------+| mysql.infoschema | localhost || mysql.session| localhost || mysql.sys| localhost || root | 10.0.0.%  |+------------------+-----------+4 rows in set (0.00 sec)mysql> update mysql.user set host='localhost' where user='root' and host='10.0.0.%'mysql> exit

误删除就只能重新建立, 不能使用 CREATE 创建语句, 只能使用 INSERT 插入语句直接编辑用户表

  1. 关闭数据库,正常启动验证
[root@db01 ~]# mysql -uroot -p1

四、连接管理

自带客户端命令

mysql

mysqldump

mysql 常用参数

-u USERNAME:  用户名; 默认为root-h HOST:  服务器主机地址/主机名; 默认为localhost-p PASSWORD: 用户密码; 默认为空-P POST: 端口(大写字母); 默认为3306-s静默-S套接字位置(指定连接socket文件路径)-e免交互执行SQL命令< 导入数据库恢复数据
[root@db01 ~]# mysql -uroot -p123 -h 10.0.0.51 -P3306mysql> select @@socket;+-----------------+| @@socket|+-----------------+| /tmp/mysql.sock |[root@db01 ~]# mysql -uroot -p123 -S /tmp/mysql.sock[root@db01 ~]# mysql -uroot -p123 -e "select user,host from mysql.user;"+---------------+-----------+| user  | host  |+---------------+-----------+| root  | 10.0.0.%  || mysql.session | localhost || mysql.sys | localhost || root  | localhost |+---------------+-----------+[root@db01 ~]# mysql -uroot -p123 < mysql.sql[root@db01 ~]# mysql -uroot -p1 -e 'source /root/world.sql'

mysql 命令连接

mysql服务器监听两种socket地址:

  1. unix sock: 监听在sock文件上,仅支持本机通信,host为localhost,127.0.0.1时自动使用unix sock
  2. ip socket: 监听在tcp的3306端口,支持远程通信

① 本地(socket文件)连接

前提条件: 提前创建 localhost 用户和密码

mysql -uroot -p123 -S /tmp/mysql.sock

连接错误①:不能连接套接字文件

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.

解决方案:检查配置文件指定路径,检查MySQL是否启动

② 远程网络连接串(TCP/IP)连接

前提条件: 提前创建 远程连接(IP) 用户和密码

mysql -uroot -p123 -h10.0.0.51 -P3306

mysql 内置命令

help 					打印mysql帮助\c  ctrl+c 				结束上个命令运行\q quit; exit; ctrl+d 	退出mysql连接\G 						将数据竖起来显示source 					恢复备份文件	

mysqld 帮助

# 获取mysqld的可用选项列表mysqld --help --verbose# 获取mysqld的默认设置mysqld --print-defaults

MySQL服务器

MariaDB选项,系统和状态变量的完整列表


开发工具

sqlyog

navicat

workbench(官方开源)


程序(驱动)连接

PHP

python

go

java

五、配置文件

初始化方式

  1. 源码包, 编译时配置参数(CMAKE)
  2. 命令行启动时指定配置参数
  3. 配置文件配置参数:类ini格式,集中式的配置

如果冲突,命令行优先级最高


配置文件默认读取路径

[root@db01 ~]# mysqld --help --verbose | grep my.cnf | head -1/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 

注意:

  1. 默认情况下,MySQL启动时,从左到右依次读取以上配置文件,如果有重复选项,以最后一个文件设置的为准。

  2. 启动服务时, 强制指定读取那个配置文件 --defautls-file

[root@db01 ~]# mysqld --defaults-file=/tmp/aa.txt &[root@db01 ~]# mysqld_safe --defaults-file=/tmp/aa.txt &

配置文件结构

[root@db01 ~]# cat >/etc/my.cnf << EOF# 服务器端配置[mysqld]# 用户user=mysql# 软件安装目录basedir=/application/mysql  # 数据存放路径datadir=/data/mysql/data # socket文件路径socket=/tmp/mysql.sock# 服务器id号server_id=6# 端口号port=3306# 客户端配置[mysql]# socket文件路径socket=/tmp/mysql.sockEOF
标签: 服务端: [mysqld] [mysqld_safe] [server] [mysqld_safe] [mysqld_multi](多实例)影响: 数据库启动,初始化 客户端: [mysql] [mysqladmin] [mysqldump] [client]影响: 只影响到本机客户端程序运行格式:parameter = value

服务器端设置

获取系统变量

SHOW GLOBAL VARIABLES;SHOW [SESSION] VARIABLES;SELECT @@VARIABLES;

服务器状态变量(只读):用于保存mysqld运行中的统计数据的变量,不可更改

-- 全局SHOW GLOBAL STATUS;-- 会话SHOW [SESSION] STATUS;

设置服务器变量的值:分全局和会话两种

help SET

设置全局变量:仅对修改后新创建的会话有效,对已经建立的会话无效,重启mysqld服务失效

SET GLOBAL system_var_name=value;SET @@global.system_var_name=value;

设置会话变量:仅对当前建立的会话有效

SET [SESSION] system_var_name=value;SET @@[session.]system_var_name=value;

设置服务器选项:重启永久生效

vim /etc/my.cnf[mysqld]...

六、启动关闭

img

以上多种方式,都可以单独启动MySQL服务mysqld_safe和mysqld一般是在临时维护时使用。从 CentOS 7 系统开始,支持systemd直接调用mysqld的方式进行启动数据库

MySQL之2---基础管理 _ JavaClub全栈架构师技术笔记

启动

/usr/local/mysql/bin/mysqld &

  • 二进制文件
  • 只有启动没有关闭, 不记录日志

/usr/local/mysql/bin/mysqld_safe &

  • shell脚本
  • 只有启动没有关闭, 记录日志, 监控状态, 异常重启, ... ...

/usr/local/mysql/support-files/mysql.server {start|stop|restart|reload|force-reload|status}

service mysqld (start, stop, restart, try-restart, reload, force-reload, status)

systemctl mysqld {start|stop|restart|reload|enable|disable|status}


关闭

/usr/local/mysql/bin/mysqladmin -uroot -p1 shutdown

[root@db01 ~]#  /usr/local/mysql/bin/mysql -uroot -p1mysql> shutdown;# 8.0新特性mysql> restart;

/usr/local/mysql/support-files/mysql.server stop

service mysqld stop

systemctl mysqld stop

七、多实例

官方文档

MySQL5.7.12之后默认开启MySQL X插件, 监听33060端口, 多实例时必须关闭

查看

[root@db01 ~]# netstat -tupln | grep mysqldtcp60  0 :::3306 :::*LISTEN  2385/mysqldtcp60  0 :::33060:::*LISTEN  2385/mysqld

关闭

① 命令行启动使用参数: --mysqlx=0--skip-mysqlx

② 配置文件/etc/my.cnf[mysqld]添加配置mysqlx=0

单版本多实例

  1. 规划相关目录
mkdir /mysql/330{7,8,9}/{data,etc,socket,log,pid} -pvchown -R mysql.mysql /mysql
  1. 准备配置文件
cat > /mysql/3307/my.cnf <<EOF[mysqld]user=mysqlbasedir=/usr/local/mysqldatadir=/mysql/3307/datasocket=/mysql/3307/mysql.sockport=3307server_id=7log_error=/mysql/3307/mysql.loglog_bin=/mysql/3307/mysql-binEOFcat > /mysql/3308/my.cnf <<EOF[mysqld]user=mysqlbasedir=/usr/local/mysqldatadir=/mysql/3308/datasocket=/mysql/3308/mysql.sockport=3308server_id=8log_error=/mysql/3308/mysql.loglog_bin=/mysql/3308/mysql-binEOFcat > /mysql/3309/my.cnf <<EOF[mysqld]user=mysqlbasedir=/usr/local/mysqldatadir=/mysql/3309/datasocket=/mysql/3309/mysql.sockport=3309server_id=9log_error=/mysql/3309/mysql.loglog_bin=/mysql/3309/mysql-binEOF
  1. 初始化三套数据并授权
mv /etc/my.cnf /etc/my.cnf.bakmysqld --initialize-insecure  --user=mysql --datadir=/mysql/3307/data --basedir=/usr/local/mysqlmysqld --initialize-insecure  --user=mysql --datadir=/mysql/3308/data --basedir=/usr/local/mysqlmysqld --initialize-insecure  --user=mysql --datadir=/mysql/3309/data --basedir=/usr/local/mysqlchown -R mysql.mysql /mysql
  1. systemd管理多实例
cat > /etc/systemd/system/mysqld3307.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/mysql/3307/my.cnf --mysqlx=0LimitNOFILE = 5000EOFcat > /etc/systemd/system/mysqld3308.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/mysql/3308/my.cnf --mysqlx=0LimitNOFILE = 5000EOFcat > /etc/systemd/system/mysqld3309.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/mysql/3309/my.cnf --mysqlx=0LimitNOFILE = 5000EOF
  1. 启动
systemctl start mysqld3307.servicesystemctl start mysqld3308.servicesystemctl start mysqld3309.service
  1. 验证多实例
netstat -tlnp | grep 330mysql -S /mysql/3307/mysql.sock -e "select @@server_id"mysql -S /mysql/3308/mysql.sock -e "select @@server_id"mysql -S /mysql/3309/mysql.sock -e "select @@server_id"

多版本多实例

  1. 解压二进制包和软链接
[root@db01 opt]# tar xf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz [root@db01 opt]# tar xf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz[root@db01 opt]# ln -s /opt/mysql-5.6.46-linux-glibc2.12-x86_64 /usr/local/mysql56[root@db01 opt]# ln -s /opt/mysql-5.7.30-linux-glibc2.12-x86_64 /usr/local/mysql57
  1. 创建相关目录并授权
mkdir /mysql/33{16,17}/{data,etc,socket,log,pid} -pvchown -R mysql.mysql /mysql
  1. 准备配置文件
cat > /mysql/3316/my.cnf <<EOF[mysqld]user=mysqlbasedir=/usr/local/mysql56datadir=/mysql/3316/datasocket=/mysql/3316/mysql.sockport=3316server_id=16log_error=/mysql/3316/mysql.loglog_bin=/mysql/3316/mysql-binEOFcat > /mysql/3317/my.cnf <<EOF[mysqld]user=mysqlbasedir=/usr/local/mysql57datadir=/mysql/3317/datasocket=/mysql/3317/mysql.sockport=3317server_id=17log_error=/mysql/3317/mysql.loglog_bin=/mysql/3317/mysql-binEOF
  1. 初始化两套数据并授权
/usr/local/mysql56/scripts/mysql_install_db --user=mysql --datadir=/mysql/3316/data --basedir=/usr/local/mysql56/usr/local/mysql57/bin/mysqld --initialize-insecure  --user=mysql --datadir=/mysql/3317/data --basedir=/usr/local/mysql57chown -R mysql.mysql /mysql
  1. systemd管理多实例并加载
cat > /etc/systemd/system/mysqld3316.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql56/bin/mysqld --defaults-file=/mysql/3316/my.cnfLimitNOFILE = 5000EOFcat > /etc/systemd/system/mysqld3317.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/mysql/3317/my.cnfLimitNOFILE = 5000EOFsystemctl daemon-reload
  1. 启动
systemctl start mysqld3316.servicesystemctl start mysqld3317.service
  1. 验证多实例
netstat -tlnp | grep 331mysql -S /mysql/3316/mysql.sock -e "select @@server_id"mysql -S /mysql/3317/mysql.sock -e "select @@server_id"

八、升级

升级方式

  1. inplace (就地升级)

    适合于主从环境, 先升级从库, 没问题再升级主库

  2. merging (逻辑备份迁移升级)


INPLACE 升级注意事项

官网说明

5.6

  • 仅在一般可用性(GA)版本之间支持升级。
  • 支持从MySQL 5.5升级到5.6。建议先升级到最新版本,然后再升级到下一版本。例如,在升级到MySQL 5.6之前,先升级到最新的MySQL 5.5版本。
  • 不支持跳过版本的升级。例如,不支持直接从MySQL 5.1升级到5.6。
  • 支持在发行系列中进行升级。例如,支持从MySQL 5.6.x 升级至5.6.y。还支持跳过发行版。例如,从MySQL 5.6.x升级至5.6.z支持。

5.7

  • 仅在一般可用性(GA)版本之间支持升级。
  • 支持从MySQL 5.6升级到5.7。建议先升级到最新版本,然后再升级到下一版本。例如,在升级到MySQL 5.7之前,先升级到最新的MySQL 5.6版本。
  • 不支持跳过版本的升级。例如,不支持从MySQL 5.5直接升级到5.7。
  • 支持在发行系列中进行升级。例如,支持从MySQL 5.7.x升级至5.7.y。还支持跳过发行版。例如,从MySQL 5.7.x升级至5.7.z支持。

8.0

  • 支持从MySQL 5.7升级到8.0。但是,仅在一般可用性(GA)版本之间支持升级。对于MySQL 8.0,要求您从MySQL 5.7 GA版本(5.7.9或更高版本)升级。不支持从非GA版本的MySQL 5.7升级。
  • 建议先升级到最新版本,然后再升级到下一版本。例如,在升级到MySQL 8.0之前,先升级到最新的MySQL 5.7版本。
  • 不支持跳过版本的升级。例如,不支持直接从MySQL 5.6升级到8.0。
  • 某个发行系列达到通用(GA)状态后,便支持在该发行系列中进行升级(从一个GA版本升级到另一个GA版本)。例如,支持从MySQL 8.0.x升级到8.0.y。(不支持涉及开发状态非GA版本的升级。)还支持跳过版本。例如,支持从MySQL 8.0.x升级到8.0.z。MySQL 8.0.11是MySQL 8.0发行系列中的第一个GA状态发行版。

总结

  • 仅支持GA版本之间升级,不支持跳过版本的升级,支持从MySQL 5.7升级到8.0

  • 5.6 --> 5.7 ,先将5.6升级至最新版,再升级到5.7

  • 5.5 --> 5.7 ,先将5.5升级至最新,再 5.5 --> 5.6 最新,再 5.6 --> 5.7 最新

  • 回退方案要提前考虑好,最好升级前要备份(特别是往8.0版本升级)。

  • 降低停机时间(停业务的时间)


INPLACE 升级过程原理

  1. 备份原数据库数据
  2. 安装新版本软件
  3. 关闭原数据库(网站挂维护页)
  4. 使用新版本软件 “挂” 旧版本数据启动(--skip-grant-tables ,--skip-networking)
  5. 升级(只是升级系统表,升级时间和数据量无关)
  6. 正常重启数据库
  7. 验证各项功能是否正常
  8. 恢复业务

INPLACE 升级演练 5.6.46 ---> 5.7.30

  1. 安装 新(5.7.30)版本软件

  2. 优雅关闭库(等待所有正在进行的事务运行完毕再关库)

mysql -S /mysql/3316/mysql.sock -e "set global innodb_fast_shutdown=0;"mysql -S /mysql/3316/mysql.sock -e "select @@innodb_fast_shutdown;"+------------------------+| @@innodb_fast_shutdown |+------------------------+|  0 |+------------------------+mysql -S /mysql/3316/mysql.sock -e "shutdown;"
  1. 冷备
cp -r /mysql/3316/data/ /tmp/3316bak
  1. 修改配置文件, 使用高版本(5.7.30)软件挂低版本(5.6.48)数据启动
cat > /mysql/3316/my.cnf <<EOF[mysqld]user=mysqlbasedir=/usr/local/mysql57datadir=/mysql/3316/datasocket=/mysql/3316/mysql.sockport=3316server_id=16log_error=/mysql/3316/mysql.loglog_bin=/mysql/3316/mysql-binEOF
/usr/local/mysql57/bin/mysqld_safe --defaults-file=/mysql/3316/my.cnf --skip-grant-tables --skip-networking &
  1. 升级(升级到8.0可以省略此步骤)
/usr/local/mysql57/bin/mysql_upgrade -S /mysql/3316/mysql.sock --forceChecking server version.Running queries to upgrade MySQL server.Checking system database.mysql.columns_priv OKmysql.dbOKmysql.engine_cost  OKmysql.eventOKmysql.func OKmysql.general_log  OKmysql.gtid_executedOKmysql.help_categoryOKmysql.help_keyword OKmysql.help_relationOKmysql.help_topicOKmysql.innodb_index_statsOKmysql.innodb_table_statsOKmysql.ndb_binlog_index OKmysql.pluginOKmysql.proc OKmysql.procs_privOKmysql.proxies_priv OKmysql.server_cost  OKmysql.servers  OKmysql.slave_master_infoOKmysql.slave_relay_log_info OKmysql.slave_worker_infoOKmysql.slow_log OKmysql.tables_priv  OKmysql.time_zoneOKmysql.time_zone_leap_secondOKmysql.time_zone_nameOKmysql.time_zone_transition OKmysql.time_zone_transition_typeOKmysql.user OKUpgrading the sys schema.Checking databases.sys.sys_config OKUpgrade process completed successfully.Checking if update is needed.
  1. 修改并重载systemd管理配置文件
cat > /etc/systemd/system/mysqld3316.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/mysql/3316/my.cnfLimitNOFILE = 5000EOFsystemctl daemon-reload
  1. 关闭数据库并正常启动
/usr/local/mysql57/bin/mysqladmin -S /mysql/3316/mysql.sock shutdownsystemctl start mysqld3316
  1. 验证
mysql -S /mysql/3316/mysql.sock -e "select user,host from mysql.user;"+---------------+-----------+| user  | host  |+---------------+-----------+| root  | 127.0.0.1 || root  | ::1||| db01  || root  | db01  ||| localhost || mysql.session | localhost || mysql.sys | localhost || root  | localhost |+---------------+-----------+mysql -S /mysql/3316/mysql.sock -e "SELECT @@VERSION;"+------------+| @@VERSION  |+------------+| 5.7.30-log |+------------+

INPLACE 升级演练 5.7.30 ---> 8.0.20

  1. 安装 新(8.0.20)版本软件

  2. 优雅关闭库(等待所有正在进行的事务运行完毕再关库)

mysql -S /mysql/3317/mysql.sock -e "set global innodb_fast_shutdown=0;"mysql -S /mysql/3317/mysql.sock -e "select @@innodb_fast_shutdown;"+------------------------+| @@innodb_fast_shutdown |+------------------------+|  0 |+------------------------+mysql -S /mysql/3317/mysql.sock -e "shutdown;"
  1. 冷备
cp -r /mysql/3317/data/ /tmp/3317bak
  1. 修改配置文件, 使用高版本(8.0.20)软件挂低版本(5.7.30)数据启动
cat > /mysql/3317/my.cnf << EOF[mysqld]user=mysqlbasedir=/usr/local/mysqldatadir=/mysql/3317/datasocket=/mysql/3317/mysql.sockport=3317server_id=17log_error=/mysql/3317/mysql.loglog_bin=/mysql/3317/mysql-binmysqlx=0EOF
/usr/local/mysql/bin/mysqld_safe --defaults-file=/mysql/3317/my.cnf --skip-grant-tables --skip-networking &
  1. 修改并重载systemd管理配置文件
cat > /etc/systemd/system/mysqld3317.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/mysql/3317/my.cnfLimitNOFILE = 5000EOFsystemctl daemon-reload
  1. 关闭数据库并正常启动
/usr/local/mysql/bin/mysqladmin -S /mysql/3317/mysql.sock shutdownsystemctl start mysqld3317
  1. 验证
mysql -S /mysql/3317/mysql.sock -e "select user,host from mysql.user;"+------------------+-----------+| user | host  |+------------------+-----------+| mysql.infoschema | localhost || mysql.session| localhost || mysql.sys| localhost || root | localhost |+------------------+-----------+mysql -S /mysql/3317/mysql.sock -e "SELECT @@VERSION;"+-----------+| @@VERSION |+-----------+| 8.0.20|+-----------+

升级前预检查

  1. mysqlsh ( 最低8.0.20 ) 安装
[root@db01 opt]# tar xf mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz [root@db01 opt]# ln -s /opt/mysql-shell-8.0.20-linux-glibc2.12-x86-64bit /usr/local/mysqlsh[root@db01 opt]# echo export PATH=\$PATH:/usr/local/mysqlsh/bin/ >> /etc/profile && . /etc/profile
  1. 验证安装
[root@db01 opt]# mysqlsh --versionmysqlsh  Ver 8.0.20 for Linux on x86_64 - for MySQL 8.0.20 (MySQL Community Server (GPL))
  1. 在 5.7.30 数据库中创建远程用户
mysql -S /tmp/mysql3317.sock -e "create user root@'10.0.0.%' identified with mysql_native_password by '123';"mysql -S /tmp/mysql3317.sock -e "grant all on *.* to root@'10.0.0.%';"
  1. 升级前检测
mysqlsh root:123@10.0.0.51:3317 -e "util.checkForServerUpgrade()" > /tmp/upcheck.log

作者:原因与结果
来源链接:https://www.cnblogs.com/backups/p/mysql_2.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/117445.html

标签:MySQL升级
分享给朋友:

“MySQL之2---基础管理” 的相关文章

MySQL面试有这一篇就够了 2022年05月16日 21:53:45
必须拿下的Mybatis动态SQL 2022年05月17日 21:28:59
sql递归查询 2022年05月17日 21:40:33
数据库之事务及事务的 ACID 性质 2022年05月21日 11:37:16
mysql 查询或 2022年06月07日 13:56:22
mysql 查询表中前10条数据 2022年06月08日 04:35:17
mysql数据查询——复杂查询 2022年06月09日 23:08:26
mysql 查询操作日志 2022年06月10日 21:58:42