mysql8数据库修改root密码,以及创建用户遇到的坑,开启远程登录,用navicat进行mysql的远程连接,mysql8.0默认编码方式,部分参数配置查询命令
yum 安装MySQL8
echo "删除系统默认或之前可能安装的其他版本的 mysql"
for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done
rm -rf /var/lib/mysql && rm -rf /etc/my.cnf
echo "安装Mysql8.0 的yum资源库"
yum -y localinstall https://repo.mysql.com//mysql80-community-release-el7-5.noarch.rpm
echo "安装Mysql8.0.29"
yum -y install mysql-community-server
echo "启动之前修改配置文件,增加上不区分大小写的参数"
rm -rf /etc/my.cnf
cat >> /etc/my.conf << EOF
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
default-storage-engine=INNODB
lower_case_table_names=1
skip-name-resolve
EOF
echo "启动MySQL服务器和MySQL的自动启动"
systemctl start mysqld.service
systemctl enable mysqld.service
echo "查看默认密码"
grep 'temporary password' /var/log/mysqld.log
# msqyl8-master ==> root@localhost: S3ZhifuI)xg#
echo "使用默认密码初次登录后, 必须要重置密码"
echo "8.0.29版本修改密码提示不符合密码复杂度,修改密码复杂度找不到密码策略,安装密码策略需要先修改密码,陷入死循环"
echo "解决办法;直接修改密码,密码设置复杂一些"
# mysql -hlocalhost -uroot -p
#ALTER USER 'root'@'localhost' IDENTIFIED BY 'E9M!EYjGWH%QLJzP';
#flush privileges;
# 修改密码安全度检测机制
set global validate_password.policy=0;
set global validate_password.length=4;
# 修改root密码
alter user 'root'@'localhost' identified by 'newpassword';
alter user 'root'@'%' identified by 'newpassword';
# 生效
flush privileges;
重启MySQL
8.0.29版本遇到的问题
1.执行:set global validate_password.policy=0;会报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
2.修改的密码太简单报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
3.安装密码策略:install plugin validate_password soname 'validate_password.so'; 会报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
因此最简单的办法就是直接修改密码,密码设置复杂一些。
创建用户和授权
在mysql8.0创建用户和授权和之前不太一样了,其实严格上来讲,也不能说是不一样, 只能说是更严格, mysql8.0需要先创建用户(创建用户时要带@并指定地址, 则grant授权时的地址就是这个@后面指定的!, 否则grant授权就会报错!)和设置密码,然后才能授权。
mysql> create user 'kevin'@'%' identified by '123456';
Query OK, 0 rows affected (0.04 sec)
mysql> grant all privileges on *.* to 'kevin'@'%' with grant option;
Query OK, 0 rows affected (0.04 sec)
Mysql8.0默认是不能使用root账号进行远程登录的! root账号只能本地登录,想要远程登录, 则需要进行update更新下root账号的权限
update mysql.user set host='%' where user="root";
flush privileges;
select host,user,authentication_string from mysql.user;
用navicat进行mysql的远程连接时,出现了弹窗报错
修改root账号权限, 允许root账号远程登录后, 用navicat进行mysql的远程连接时,出现了弹窗报错:
出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password, 而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种:
一种是升级navicat驱动;一种是把mysql用户登录密码加密规则还原成mysql_native_password;
这里选择第二种方法来解决: (个人建议使用第一种方法)
#修改加密规则
mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.16 sec)
#更新一下用户的密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.08 sec)
#刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.03 sec)
1、使用sqlyog链接时会出现2058的异常,此时我们需要修改mysql,命令行登录mysql(与修改密码中登录相同,使用修改后的密码),然后执行下面的命令:mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 其中password为自己修改的密码。然后SQLyog中重新连接,则可连接成功,OK。
2、如果报错:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'则使用下面命令:mysql > ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
mysql8.0默认编码方式
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database | utf8mb4_0900_ai_ci |
| collation_server | utf8mb4_0900_ai_ci |
+--------------------------+--------------------------------+
11 rows in set (0.00 sec)
修改其他编码方式,比如需要修改为utf8mb4,可以使用如下方式:
# 修改mysql配置文件my.cnf, 找到后请在以下三部分里添加如下内容,然后重启mysqld服务即可
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# 参数讲解
character_set_client (客户端来源数据使用的字符集)
character_set_connection (连接层字符集)
character_set_database (当前选中数据库的默认字符集)
character_set_results (查询结果字符集)
character_set_server (默认的内部操作字符集)
数据库连接参数中:
characterEncoding=utf8 会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。
而autoReconnect=true 是必须加上的。
部分参数配置查询命令
#查询mysql最大连接数设置
mysql> show global variables like 'max_conn%';
mysql> SELECT @@MAX_CONNECTIONS AS 'Max Connections';
# 查看最大链接数
mysql> show global status like 'Max_used_connections';
# 查看慢查询日志是否开启以及日志位置
mysql> show variables like 'slow_query%';
# 查看慢查询日志超时记录时间
mysql> show variables like 'long_query_time';
# 查看链接创建以及现在正在链接数
mysql> show status like 'Threads%';
# 查看数据库当前链接
mysql> show processlist;
# 查看数据库配置
mysql> show variables like '%quer%';