Centos7 RPM安装MYSQL8
前言
都说MySql8.x
比5.7
快两倍,可以参考一下。
但不支持从 MySQL 8.0
降级到 MySQL 5.7
(或从某个 MySQL 8.0
版本降级到任意一个更早的 MySQL 8.0
版本)。数据备份方式还是可以的。
- 注意
MySql8
的用户安全策略的改变 - 注意
MySql8
编码格式 - 支撑内网服务器安装
准备
下载
1 | # 打包下载 |
安装
先查看有没有 mariadb
1 | rpm -qa | grep mariadb |
有就强制卸载
1 | rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 |
强制安装
1 | rpm -ivh mysql-community-common-8.2.0-1.el7.x86_64.rpm --nodeps --force |
这时候查看安装
1 | rpm -qa|grep mysql |
初始化配置
1 | vim /etc/my.cnf |
配置路径 /opt/db/
1 | [mysql] |
1 | rm -rf /opt/db/mysql/ |
报错解决
mysqld: error while loading shared libraries: libaio.so.1
1 | yum install libaio |
Can't find error-message file '/usr/share/MySQL-8.2/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.
1 | lc-messages-dir=/usr/share/MySQL-8.2 |
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
1 | rm -rf /var/lib/mysql/mysql.sock |
查看安装日志中的密码
1 | cat /opt/db/mysql_log/mysqld.log | grep password |
登录
1 | mysql -uroot -p |
比如这个uQ3sw%Cu;IKk
复制粘贴就可以了。
修改密码
1 | flush privileges; |
无密码的方式,可用于找回密码。
输入一百次也输入不对默认密码 配置文件 MySQL 免密码登录 编辑 MySQL 的配置文件
1 | vim /etc/my.cnf |
在 [mysqld]
下添加
1 | #在 [mysqld] 开头的下面一行加入下面这句 |
修改密码(记得删除my.cnf
文件的东西)
1 | # 这里需要先刷新权限,不然会报错。 |
或者
1 | bin/mysql |
基本配置
1 | [mysql] |
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
[官方介绍]([https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts
Centos7 解压安装MYSQL8
都说MySql8.x比5.7快两倍,可以参考一下。
但不支持从 MySQL 8.0 降级到 MySQL 5.7(或从某个 MySQL 8.0 版本降级到任意一个更早的 MySQL 8.0 版本)。数据备份方式还是可以的。
- 注意MySql8 的用户安全策略的改变
- 注意MySql8 编码格式
这里安装的是MySql 8
下载地址:https://dev.mysql.com/downloads/mysql/8.0.html
我这里下载的是mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz
一、解压mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz
首先解压,输入mysql按tab补齐,/home/mysql是自己想要安装的目录.
没有权限用su
输入root密码,用root执行。
tar -xvf报gz错误,就用tar -zxvf 解压命令
1 | mkdir /opt/db |
二、可以先把mariadb卸载了
mariadb其实与mysql是一样的,只不过mysql之父离开了Oracle,觉得依靠Oracle不靠谱,想做一个完全开源的数据库,这就是mariadb,mariadb的端口还是3306。
1 | rpm -qa|grep mariadb |
三、检查mysql组和用户是否存在,如无创建
1 | cat /etc/group | grep mysql |
四、在/etc下创建my.cnf
编码在5.5.3
以上都会支持utf8mb4(utf8 most byte 8)
,意思是支持4byte
的不常用汉字和Emoji
表情,毕竟65535
还真的是不够用。
对于 CHAR
类型数据,utf8mb4
会多消耗一些空间,根据 Mysql
官方建议,使用 VARCHAR
替代 CHAR
。
1 | vim /etc/my.cnf |
删除所有内容,添加下面内容
1 | [mysql] |
五、安装
1 | cd /opt/db/ |
安装失败,可以看一下mysql
账户对/opt/db/mysql
下的文件有没有读写权限
如果执行报错UTF8MB4
,就把/etc/my.cn
f的utf8
换成UTF8MB4
六、连接
查看密码
1 | cat /opt/db/mysql_log/mysqld.log |grep password |
启动(&是放在后台执行)
1 | bin/mysqld_safe --user=mysql & |
然后执行(但是如果使用无密码的方式登陆,就不可以使用下面令名)
1 | alter user 'root'@'localhost' identified by "123456"; |
无密码的方式,可用于找回密码。
配置文件 MySQL 免密码登录
编辑 MySQL 的配置文件
1 | vim /etc/my.cnf |
在 [mysqld]
下添加
1 | #在 [mysqld] 开头的下面一行加入下面这句 |
修改密码(记得删除my.cnf
文件的东西)
1 | # 这里需要先刷新权限,不然会报错。 |
或者
1 | bin/mysql |
七、后续操作
创建软连接
1 | ln -s /home/mysql/bin/* /usr/local/bin/ |
/usr/local/bin
目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件。
添加系统环境变量
1 | vim /etc/profile |
加入配置
添加服务
将服务文件拷贝到init.d下,并重命名为mysqldcp support-files/mysql.server /etc/init.d/mysqld
赋予可执行权限chmod +x /etc/init.d/mysqld
添加服务chkconfig --add mysqld
关闭firewall,安装iptables可选(比如服务器就需要开放3306)
本文地址: Centos7 解压安装MYSQL8
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
[官方介绍]([https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts
MySQL8.0新特性-新的索引方式
三种新的索引方式
1、隐藏索引
- MySQL8.0 支持隐藏索引(invisible index),不可见索引
- 隐藏索引不会被优化器使用,但需要维护。
- 应用场景:软删除、灰度发布。
- 软删除:不确定当前索引是否需要删除的时候,软删除,不会彻底删除,可以恢复索引,不需要重新创建,但需要维护。
- 灰度发布:测试索引,对当前数据库不会参生太多影响,确认有效后,可以取消隐藏,改变为正常索引。
操作:
1 | create table app_user ( |
2、降序索引
MySQL8.0真正支持降序索引(descending index)。
只有InnoDB存储引擎支持降序索引,只支持
BTREE
降序索引。MySQL8.0不再对
GROUP BY
操作进行隐式排序,也就是说,排序必须要使用ORDER BY
。
操作:
1 | create table app_dept |
3、函数索引
- MySQL8.0支持在索引中使用函数(表达式)的值。
- 支持降序索引,支持JSON数据索引。
- 函数索引基于虚拟列功能实现。
1 | create table t1( |
本文地址:MySQL8.0新特性-新的索引方式
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
官方介绍
MySQL8.0备份和还原
大家的需求都很清楚了,那么我们直接来看如何备份和还原。
下面的命令基于 Manjaro Linux
,在 Windows
下添加命令的 .exe
后缀。
备份
查看备份命令参数 : mysqldump --help
下面的备份的脚本中会带有 drop
create
insert
单库备份
1 | mysqldump -h127.0.0.1 -uroot -p [OPTIONS] [数据库名称] >/var/xxx地址.sql |
单库中单\多表备份
1 | mysqldump -h127.0.0.1 -uroot -p [OPTIONS] [数据库名称] [tables] >/var/xxx地址.sql |
多库备份
1 | mysqldump -h127.0.0.1 -uroot -p [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] >/var/xxx地址.sql |
全库备份
1 | mysqldump -h127.0.0.1 -uroot -p [OPTIONS] --all-databases [OPTIONS] >/var/xxx地址.sql |
常用参数
查看备份命令参数 : mysqldump --help
下面列出常用参数
全称 | 简写 | 含义 | 默认 |
---|---|---|---|
–all-tablespaces | -Y | 备份表空间 | FALSE |
–no-tablespaces | -y | 不备份 | FALSE |
–add-database | -A | 全库备份 | FALSE |
–add-drop-databas | 在建库之前drop | FALSE | |
–add-drop-trigger | 在建触发器之前drop | FALSE | |
–add-drop-table | 在建表之前drop | TRUE | |
–no-create-info | -t | 无create table语句 | FALSE |
–no-data | -d | 无数据 | FALSE |
no-create-db | -n | 无建库语句 | FALSE |
正常的全库备份
1 | mysqldump -h127.0.0.1 -umaxzhao -p -B db_name >backup/mysql_db_name.sql |
设置编码
查看编码
1 | -- 找到character_set_database |
设置编码
1 | mysqldump --default-character-set=utf8mb4 |
PowerShell
导出报错
可以直接指定文件,不适用 shell
的 >
输出。
1 | --result-file=1.sql |
PowerShell
重定向导出的结果是utf-16
数据还原
在命令行执行
1 | mysql -h127.0.0.1 -uroot -p < /var/备份文件.sql |
在 SQL 指令中执行
1 | source /var/备份文件.sql |
错误解决
ERROR at line : Unknown command '\''.
1 | mysql -h127.0.0.1 -uroot -p --default-character-set=utf8 < /var/备份文件.sql |
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
[官方介绍]([https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts
MySQL8.0创建用户及其配置
基本配置文件 my.cnf
1 | [mysqld] |
数据库初始化:mysqld --initialize
libicuuc.so.63
最后说;
数据库初始化后随机密码在日志文件中hostname.err
,需要使用该密码登录并修改密码。
1 | alter user 'maxzhao'@'localhost' identified by "maxzhao"; |
MySQL8默认的认证插件是 caching_sha2_password
,很多客户端都不支持,可将默认的认证插件修改为mysql_native_password
,在配置文件/etc/my.cnf
中配置default_authentication_plugin=mysql_native_password
。也有一部分linux配置文件在/etc/mysql/my.cnf
。
1、用户创建和授权(分离)
创建账号、分配权限
1 | CREATE USER 'maxzhao'@'localhost' IDENTIFIED BY 'maxzhao'; |
2、认证插件更新
MySQL8.0 中默认的身份认证插件是 caching_sha2_password
,替代类之前的mysql_native_password
。
具体配置开篇降讲到了。
查看:
show variables like ‘default_authentication_plugin;
select user,host,plugin from mysql.user;
更新:
- 在配置文件中修改(如上)
alter user 'maxzhao'@'%' identified with mysql_native_password by 'maxzhao';
3、密码管理
MySQL8.0允许限制重复使用以前的密码,当用root权限修改密码时,不受权限``限制。
配置文件/etc/mysql/my.cnf
或者 /etc/my.cnf/
中的参数(需要重启服务器生效):
1 | # 不能与以前3次密码重复。 |
当password_require_current=ON
的时候,修改密码的SQL语句为:
1 | alter user maxzhao identified by 'maxzhao' replace 'maxzhao'; |
在环境变量中配置:
1 | -- 当前会生效,重启后失效 |
MySQL8.0的持久化操作实现很简单,会把当前持久化的边境变量写入/var/lib/mysql/mysqld-auto.cnf
中。
用户级别的变量
1 | alter user 'maxzhao'@'localhost' password history 5; |
二进制日志
1 | -- log_bin |
4、角色管理(新功能)
极大的简化了用户授权的管理。
授权命令
1 | -- 创建角色 |
撤销权限命令:
1 | revoke insert,update on *.* from ‘role_w'; |
基本操作语句
1 | -- 添加字段 |
本文地址:MySQL8.0创建用户及其配置
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
官方介绍
ArchLinux下安装的问题
libicuuc.so.63问题
这里在 arch linux
下有可能会出现 mysqld: error while loading shared libraries: libicuuc.so.63: cannot open shared object file: No such file or directory
,需要下载 icu63
,用软件管理器下载很方便,或者添加 yaourt
下载也很方便。
1 | wget http://download.icu-project.org/files/icu4c/63.1/icu4c-63_1-src.tgz |
文件报错问题
1 | cd /var/lib/mysql/ |
启动报错
1 | # [InnoDB] The innodb_system data file 'ibdata1' must be writable |
本文地址:MySQL8.0创建用户及其配置
MySQL8.0新特性-通用表表达式(CTE)
通用表表达式与派生表类似。
CTE可以多次引用,并且可以引用其它CTE,可以递归。
CTE支持SIUD等语句。
1、非递归的CTE
通过一个简单的实例来了解一下:
1 | select * from (select 1) as cte1; |
2、递归CTE
通过一个简单的实例来了解一下:
1 | with recursive cte(n) as |
如图所示:
实例演示:
1 | -- 初始化 |
限制参数
cte_max_recursion_depth
递归深度max_execution_time
最大执行时间
1 | -- 一个死循环的sql |
简单的测试:实现斐波那契
1 | with recursive cte(n,m) as |
是不是感觉很简单,我第一次写这个的时候用了1分钟,大家呢?
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
官方介绍
MySQL8.0新特性-窗口函数
简介
窗口函数与分组聚合函数类似,但是每行数据都生成一个结果。
聚合窗口函数: SUM、AVG、COUNT、MAX、MIN
……
1 | -- 创建表 |
普通函数
1 | --正常情况下的计算不同国家的总利润: |
专用窗口函数
1 | -- 准备数据 |
序号函数
显示当前行号
- ROW_NUMBER():排序
- RANK()
- DENSE_RANK()
1 | -- 正常排序 |
头尾\前后函数
- FIRST_VALUE()
- LAST_VALUE()
- LEAD()
- LAG()
1 | select val,first_value(val) over (order by val) as 'first' |
分布函数
CUME_DIST()
- 用途:分组内小于等于当前rank值的行数/分组内总行数,这个函数比percen_rank使用场景更多。
- 应用场景:大于等于当前val的记录比例有多少。
PERCENT_RANK()
- 用法:和之前的RANK()函数相关,每行按照如下公式进行计算:
(rank - 1) / (rows - 1)
其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数。
- 用法:和之前的RANK()函数相关,每行按照如下公式进行计算:
1 | select val,rank() over (order by val) as 'rank' |
数据区间函数
- NTH_VALUE(expr,n)
- 用途:返回窗口中第N个expr的值,expr可以是表达式,也可以是列名。
- 应用场景:每个用户订单中显示本用户金额排名第二和第三的订单金额。
- NTILE()
- 用途:将分区中的有序数据分为n个桶,记录桶号。
- 应用场景:将每个用户的订单按照订单金额分成3组。
1 | select year,profit,nth_value(profit,1) over w as 'nth_1' |
本文地址:MySQL8.0新特性-窗口函数
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
官方介绍
解压安装MySQL5.7(Linux)
1.安装mysql之前需要确保系统中有libaio依赖,使用如下命令:
1 | rpm -qa |grep libaio |
2.进入centos终端操作界面,使用wget命令下载mysql5.7 64位安装文件,或者手动下载:
1 | wget -c https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz |
3.将mysql安装包解压到指定目录,命令如下:
1 | tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /var/soft |
4.进入/var/soft目录:
1 | cd /var/soft |
5.为mysql安装目录创建软链接:
1 | ln -s mysql-5.7.18-linux-glibc2.5-x86_64 mysql |
6.进入安装mysql软件的目录,命令如下:
1 | cd /var/soft/mysql |
7.安装mysql,命令如下:
1 | ./bin/mysqld --user=mysql --basedir=/var/soft/mysql --datadir=/var/soft/mysql/data --initialize |
安装完成,将随机生成的登录密码记录下来:
7.创建快捷指令
1 | ln -s /var/soft/mysql /usr/bin/mysql |
8.开启mysql服务,命令如下:
1 | ./support-files/mysql.server start |
这里会失败,因为为不是安装在默认目录/usr/local/mysql下,这里修改配置文件,在basedir加入上面安装时的目录:
1 | vim /var/soft/mysql/support-files/mysql.server |
9.将mysql进程放入系统进程中,命令如下:
1 | cp support-files/mysql.server /etc/init.d/mysqld |
10.重新启动mysql服务,命令如下:
1 | service mysqld restart |
11.使用随机密码登录mysql数据库,命令如下:
1 | mysql -u root -p |
等待系统提示,输入随机密码,即可登录。
12.进入mysql操作行,为root用户设置新密码(小编设为rootroot):alter user 'root'@'localhost' identified by 'maxzhao';
13.设置允许远程连接数据库,命令如下:connect mysql;
update user set user.Host='%' where user.User='root';
14.刷新权限,命令如下:flush privileges;
exit;
基本配置
1 | [mysqld] |
本文地址: 解压安装MySQL5.7(Linux)
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
[官方介绍]([https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts