文章目录
一、mysql的基本设置
如果需要安装姿势请查看CentOS 7-mysql的安装姿势这篇博客。
1. 字符集设置
默认安装配置在:/etc/my.cnf
注意分版本:
- 在5.1版本时,为了解决中文乱码问题,my.ini内[mysql] 和[mysqld]中都写:
default-character-set=utf8 - 在5.5版本以上,[mysql]内可以这么写,[mysqld]内不能这么写了,而是写成:
character-set-server=utf8
2. 设置mysql自动启动
非阿里云主机centos 7
- 执行
chkconfig mysqld on
- 执行
chkconfig --list mysqld
查看【如果2-5位启用on状态,表示设置成功】
阿里云主机centos 7
- 设置开机启动
systemctl enable mysqld
- 加载配置
systemctl daemon-reload
3. 密码设置
- 临时密码
第一次启动数据库,会有临时密码,初始密码在/var/log/mysqld.log文件中,查看命令如下:
grep "password" /var/log/mysqld.log
或者
cat /var/log/mysqld.log | grep "A temporary password"
- 修改密码
- 登陆数据库
mysql -u root -p
输入临时密码
- 设置新密码
问题一:You must reset your password using ALTER USER statement before executing this statement.
MySQL版本5.7.6版本(以前)用户可以使用如下命令:
MySQL版本5.7.6版本(开始后)的用户可以使用如下命令:update user set password = password('new-password') where user = 'root';
问题二:alter user user() identified by 'new-password';
Your password does not satisfy the current policy requirements
原因:密码难度不满足要求。
方案:降低密码难度# 降低密码难度 set global validate_password_policy=LOW; # 设置密码长度 set global validate_password_length=6;
- 登陆数据库
- 暴力重置密码
- 修改mysql的配置文件
vim /ect/my.cnf
- 在
[mysqld]
下添加skip-grant-tables
参数
问题一:在5.7版本中,添加参数无法启动。查看/var/log/mysql.log日志提示:unknown option '--ship-grant-tables'
替代方案:执行mysqld -skip-grant-tables
- 使用
mysql -u root
登陆
- 刷新授权表【测试5.7版本中必须要该操作】,直接执行修改密码操作会报:
The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
flush privileges;
- 根据mysql的版本进行修改密码
5.7版本:
alter user 'root'@'localhost' identified by 'new-password';
- 重新启动mysqld服务,很重要,否则,都是跳过密码验证的方式运行服务。
service mysqld restart
- 修改mysql的配置文件
4. 查看目前mysql的用户,是否存在匿名用户。
# 查看是否有匿名用户
select user,host from mysql.user;
# 删除匿名用户
delete from mysql.user where user = '';
# 刷新配置
flush privileges;
5. 插入mysql新用户。
# 插入新用户
# 5.7版本以前
insert into mysql.user(Host, User, Password) values ("localhost", "yourusername", password("yourpassword"));
# 5.7版本后
# username - 你将创建的用户名,
# host - 指定该用户在哪个主机上可以登陆,如果"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录,如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录;也可以指定某台机器可以远程登录;
# password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器。
create user 'username'@'host' identified by 'password';
# 刷新生效
flush privileges;
6. 解决root账号远程链接
-
8.0以前处理方式
- 查看Host、User
select Host,User from user \G;
- 更新root的远程主机,允许任何主机可以访问
update user set host = "%" where Host = "localhost" and User = "root";
- 刷新权限
flush privileges;
- 查看Host、User
-
mysql8.0以前的版本可以使用grant在授权的时候隐式的创建用户,8.0以后已经不支持,所以必须先创建用户,然后再授权
- create user ‘test’@’%’ IDENTIFIED BY ‘123456’;
- grant all privileges on . to ‘test’@’%’;
-
如果还链接不上,查看防火墙是否开启,如果开启,关闭防火墙
查看是否开启 ps -ef | grep firewalld 关闭防火墙 sudo service firewall.service stop
7. 打开genelog,记录所有sql操作语句。
# 设置日志输出路径
set global general_log_file = "/tmp/general.log";
# 开启日志
set global general_log = on;
8. 让简单的密码可以设置成功
# 8.0以前
set global validate_password_policy = 0;
set global validate_password_length = 1;
# 8.0 以后
set global validate_password.policy = 0;
set global validate_password.length = 1;
9. 赋给对应用户的权限
# 将所有权限赋给xx用户
grant all privileges on *.* to 'xx'@'%‘ identified by '123456' with grant option;
# 根据自己实际情况决定是否开什么权限
# 数据库.*:表示该数据库的所有表
# host:对应的来访问的ip
grant select,insert,update on 数据库.* to 用户@'host' identified by '密码'
# 回收xx用户的所有权限
revoke all privileges on *.* from xx;
# 需要刷新权限操作
flush privileges;