0%

mysql开启远程访问权限

mysql开启远程访问权限

在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库。缺省状态下,mysql的用户没有远程访问的权限

数据库配置文件

首先查看配置文件,查看mysql是否只允许本地127.0.0.1访问
cat /etc/my.cnf
bind-address=127.0.0.1 #表示只允许本机访问,去掉或改成0.0.0.0

更改表

帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%”

1
2
3
4
5
mysql -u root -p 
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
FLUSH PRIVILEGES;
授权法
1
2
3
4
5
6
7
8
#所有权限
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION
#指定用户指定密码
mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI
TH GRANT OPTION;
#指定ip指定用户
mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY
'mypassword' WITH GRANT OPTION;
mysql8.0一些常见问题
  1. mysql8.0远程连接失败
    MySQL8.0之前的版本密码加密规则:mysql_native_password,
    MySQL8.0密码加密规则:caching_sha2_password
1
2
3
4
5
#修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
#重新设置密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新的密码';
  1. 表名大小写不敏感
    linux下mysql表名是大小写敏感的,要配置大小写不敏感需要设置参数lower_case_table_names=1, mysql8.0之后默认 lower_case_table_names 不能修改只允许初始化的时候设置

初始化数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#删除原来的数据
rm -rf /var/lib/mysql

#重新初始化并启动MYSQL
mysqld --initialize --console --lower-case-table-names=1
chown -R mysql:mysql /var/lib/mysql/
systemctl start mysqld
systemctl status mysqld

#重新初始化登录帐户
vim /etc/my.cnf.d
--增加
skip-grant-tables
--退出后重启
systemctl stop mysqld
systemctl start mysqld
--开始重置密码
mysql -uroot -p --输入任意密码
--必须先执行 flush privileges,否则会报The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'tw369.com';
UPDATE USER SET host ="%" where user = "root";
flush privileges;
exit
#启动服务
删除配置文件的 skip-grant-tables

systemctl restart mysqld