前言:不知道为什么我的云服务器在线安装mysql特别特别慢,于是我手动下载安装了,mysql服务器(本来是想安装5.7的,下错了,查了下使用区别,对我而言这两个版本没啥区别)

首先在线安装

但是对我而言,在线安装的时候太慢了,十几k每秒,无奈我就离线安装,直接去官网下载后对应的版本,
下载这种 rpm-bundle.tar结尾格式到
(Tip:不用注册oracle账号,直接下载)

离线安装

  • 1 下载好的安装包直接上传到服务器,(rz 命令或者xshell等工具)
  • 2 首先查看之前是否有安装过mysql的服务(像我就前前后后失败好几次)
rpm -qa | grep mariadb  # 命令查看 mariadb 的安装包 是否有内容输出
# 如果有 直接卸载
rpm -e mariadb-libs-xxx-xxx # 卸载mariadb
# 在查看是否有内容输出,有就继续卸载 直到没有为止
rpm -qa | grep mariadb
  • 3 解压mysql8安装包
tar -xvf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar
# 解压出这些文件
mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar                 
mysql-community-test-8.0.16-2.el7.x86_64.rpm
mysql-community-client-8.0.16-2.el7.x86_64.rpm           
mysql-community-common-8.0.16-2.el7.x86_64.rpm           
mysql-community-devel-8.0.16-2.el7.x86_64.rpm            
mysql-community-embedded-compat-8.0.16-2.el7.x86_64.rpm  
mysql-community-libs-8.0.16-2.el7.x86_64.rpm             
mysql-community-libs-compat-8.0.16-2.el7.x86_64.rpm      
mysql-community-server-8.0.16-2.el7.x86_64.rpm
  • 4 安装
# 需要依次安装
rpm -ivh mysql-community-common-8.0.16-2.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.16-2.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.16-2.el7.x86_64.rpm 
rpm -ivh mysql-community-server-8.0.16-2.el7.x86_64.rpm
  • 5 初始化, 生成密码 启动服务
mysqld --initialize;
# 修改目录权限
sudo chown mysql:mysql /var/lib/mysql -R;
# 启动服务
systemctl start mysqld
# 产看密码
cat /var/log/mysqld.log | grep password
  • 6 修改密码
mysql -u root -p '原来的密码'  # 登陆
use mysql;   # 选择数据库

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';

 

  • 7 修改成远程连接

网上查到的信息大都是给root用户或者某个用户设置权限,使这个用户可以被远程连接访问。针对该问题的解决办法是通过语句GRANT ALL ON . TO ‘root’@’%’;为root用户(或者是其他用户)设置权限,但我试了几次都是失败的,都报错了,ERROR 1410 (42000): You are not allowed to create a user with GRANT。

我也是这样 
警告⚠️: 远程连接很有可能造成数据泄漏等问题,企业服务器慎重! 当然我个人服务器无所谓了

use mysql;   # 选择数据库
select host,user,authentication_string,plugin from user;  # 查看

# 修改 host 为 % 所有人都可以访问
update user set host = "%" where user = "root";

# 但是这样到话再次修改密码 就得使用下面到命令
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的新密码';  
# 退出
exit
# 重启mysql
systemctl restart mysqld
# 这样就能远程连接了

关于mysql8忘记密码修改小知识

如何关闭 --skip-grant-tables 模式
https://unix.stackexchange.com/questions/58655/turn-off-skip-grant-tables-in-mysql

# 查找systemd设置的环境变量,找到以 Environment= 开头的 确认是否是 --skip-grant-tables 模式
sudo systemctl show
# 如果是可以 执行下面语句 解决,  不是的话则此方法不行。
sudo systemctl set-environment MYSQLD_OPTS=""

最后关于创建数据库的小知识

# 第一个字符集选择这个
utf8mb4
# 第二个排序说明选择这个
utf8_general_ci

说明:
1.一般选择utf8.下面介绍一下utf8与utfmb4的区别。

utf8mb4兼容utf8,且比utf8能表示更多的字符。至于什么时候用,看你的做什么项目了,到看unicode编码区从1 ~ 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间。

2.排序说明

排序一般分为两种:utf_bin和utf_general_ci

bin 是二进制, a 和 A 会别区别对待.

例如你运行:

select * from table where a = ‘a’;

那么在utf8_bin中你就找不到 a = ‘A’ 的那一行, 而 utf8_general_ci 则可以.

utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。

utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果

utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容

utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。

utf8_general_ci校对速度快,但准确度稍差。(准确度够用,一般建库选择这个)

utf8_unicode_ci准确度高,但校对速度稍慢。