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‘默认@'%‘
- 匹配优先级:
安全规范:
a. 尽量小, 最好细化到单一IP, 不能使用%
b. 用户名有特点
c. 无用的用户要删除(5.7以前)或者锁定
d. 密码超过三种复杂度, 12位以上
操作命令
创建用户和密码
create user 'USERNAME'@'HOST' identified by 'PASSWORD';
8.0新特性:
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.%';
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.是否有邮件批复
2.对哪些库和表做操作
3.做什么操作(增删改查)
4.从什么地址来登录- 开发人员找你要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 用户 忘记密码(误删除\误修改)
- 关闭数据库
[root@db01 ~]# systemctl stop mysqld
- 维护模式启动数据库
[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,关闭意义相同_和-相同
- 登录并修改密码
[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 插入语句直接编辑用户表
- 关闭数据库,正常启动验证
[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地址:
- unix sock: 监听在sock文件上,仅支持本机通信,host为localhost,127.0.0.1时自动使用unix sock
- 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
开发工具
sqlyog
navicat
workbench(官方开源)
程序(驱动)连接
PHP
python
go
java
五、配置文件
初始化方式
- 源码包, 编译时配置参数(CMAKE)
- 命令行启动时指定配置参数
- 配置文件配置参数:类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
注意:
默认情况下,MySQL启动时,从左到右依次读取以上配置文件,如果有重复选项,以最后一个文件设置的为准。
启动服务时, 强制指定读取那个配置文件
--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]...
六、启动关闭
以上多种方式,都可以单独启动MySQL服务mysqld_safe和mysqld一般是在临时维护时使用。从 CentOS 7 系统开始,支持systemd直接调用mysqld的方式进行启动数据库
启动
① /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
单版本多实例
- 规划相关目录
mkdir /mysql/330{7,8,9}/{data,etc,socket,log,pid} -pvchown -R mysql.mysql /mysql
- 准备配置文件
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
- 初始化三套数据并授权
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
- 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
- 启动
systemctl start mysqld3307.servicesystemctl start mysqld3308.servicesystemctl start mysqld3309.service
- 验证多实例
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"
多版本多实例
- 解压二进制包和软链接
[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
- 创建相关目录并授权
mkdir /mysql/33{16,17}/{data,etc,socket,log,pid} -pvchown -R mysql.mysql /mysql
- 准备配置文件
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
- 初始化两套数据并授权
/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
- 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
- 启动
systemctl start mysqld3316.servicesystemctl start mysqld3317.service
- 验证多实例
netstat -tlnp | grep 331mysql -S /mysql/3316/mysql.sock -e "select @@server_id"mysql -S /mysql/3317/mysql.sock -e "select @@server_id"
八、升级
升级方式
-
inplace (就地升级)
适合于主从环境, 先升级从库, 没问题再升级主库
-
merging (逻辑备份迁移升级)
INPLACE 升级注意事项
官网说明
- 仅在一般可用性(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支持。
- 仅在一般可用性(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支持。
- 支持从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 升级过程原理
- 备份原数据库数据
- 安装新版本软件
- 关闭原数据库(网站挂维护页)
- 使用新版本软件 “挂” 旧版本数据启动(
--skip-grant-tables
,--skip-networking
) - 升级(只是升级系统表,升级时间和数据量无关)
- 正常重启数据库
- 验证各项功能是否正常
- 恢复业务
INPLACE 升级演练 5.6.46 ---> 5.7.30
-
安装 新(5.7.30)版本软件
-
优雅关闭库(等待所有正在进行的事务运行完毕再关库)
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;"
- 冷备
cp -r /mysql/3316/data/ /tmp/3316bak
- 修改配置文件, 使用高版本(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 &
- 升级(升级到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.
- 修改并重载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
- 关闭数据库并正常启动
/usr/local/mysql57/bin/mysqladmin -S /mysql/3316/mysql.sock shutdownsystemctl start mysqld3316
- 验证
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
-
安装 新(8.0.20)版本软件
-
优雅关闭库(等待所有正在进行的事务运行完毕再关库)
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;"
- 冷备
cp -r /mysql/3317/data/ /tmp/3317bak
- 修改配置文件, 使用高版本(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 &
- 修改并重载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
- 关闭数据库并正常启动
/usr/local/mysql/bin/mysqladmin -S /mysql/3317/mysql.sock shutdownsystemctl start mysqld3317
- 验证
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|+-----------+
升级前预检查
- 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
- 验证安装
[root@db01 opt]# mysqlsh --versionmysqlsh Ver 8.0.20 for Linux on x86_64 - for MySQL 8.0.20 (MySQL Community Server (GPL))
- 在 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.%';"
- 升级前检测
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),我们将第一时间核实后及时予以删除。