在做开发测试的时候,经常会用到MySQL数据库。测试使用的数据库不在本机上而在虚拟机里,访问数据库就比较蛋碎了。因为MySQL数据库默认是没有开放远程访问授权的。不能够直接访问,下面介绍两种常用的开启MySQL远程访问权限开启方法:
方法一:修改user
表开启远程访问
在终端中键入以下命令登录MySQL数据库:
1 | mysql -uROOT -pPASSWORD |
其中,ROOT
表示登录的用户名,PASSWORD
表示登录的该用户的密码。登录成功之后,访问mysql
数据库,依次执行以下SQL语句:
1 | mysql> use mysql; |
将会打印出MySQL数据库中所有用户以及其授权访问地址,以博主的为测试数据库为例,打印信息如下:
1 | +-------------------------+------------------+ |
可以看到,host
栏表示登录主机,可以是ip地址或者主机名,不难发现其实他们都是虚拟机本地地址,因此我们是没办法从物理机访问该数据库的。因此,我们只需要更改登录主机的host
栏目里的地址,便可以在远程主机上访问了。
比如博主通过桥接模式
与虚拟机相连接,物理机的ip地址为192.168.1.101
,虚拟机的ip地址为192.168.1.103
,我们可以执行以下SQL语句来达到远程访问MySQL:
1 | mysql> use mysql; |
然后再执行以下命令重启MySQL即可通过物理机访问MySQL啦:
1 | sudo service mysql restart |
也可以执行以下SQL语句刷新授权信息来达到不重启MySQL即可远程访问:
1 | mysql> FLUSH PRIVILEGES; |
当然,在大多数时候,我们都希望可以从任意ip地址访问,而不是仅限于指定的ip,这样就算ip地址变动也不会再次折腾,这个时候我们可以执行以下SQL:
1 | mysql> use mysql; |
这样,将host
值改为%
,就可以在任意主机登录到MySQL咯。
方法二:通过授权语句开启远程访问
与修改user表的方法相同,在终端中连接到MySQL数据库。然后执行以下SQL语句即可授权指定用户远程访问MySQL:
1 | mysql> grant all privileges on *.* to USERNAME@'%' identified by "PASSWORD"; |
需要注意的是,其中*.*
的含义为:
- 第一个
*
为MySQL中的数据库名。 - 第二个
*
为MySQL中的指定的数据库的表名。 USERNAME
为授权用户的用户名。%
为任意主机,也可以写指定的ip地址或者主机名。PASSWORD
为授权改用户在指定的数据访问MySQL时的密码,如果该密码和本地用户同名用户的密码不一致,远程访问时务必使用该授权密码。
解决Linux下,MySQL中文乱码问题
首先,当然是确保表或者创建的数据库的编码方式为UTF-8
啦,在这些都没问题的情况下,执行以下SQL语句,查看MySQL的编码情况:
1 | mysql> show variables like 'character%'; |
一般情况下,将会得到以下结果:
1 | +--------------------------+----------------------------+ |
此时,我们修改位于/etc/mysql/my.cnf
的my.cnf
文件:
1 | vim /etc/mysql/my.cnf |
在[client]
中加入:
1 | default-character-set=utf8 |
在[mysqld]
中加入:
1 | character-set-server=utf8 |
退出保存之后重启MySQL,再次执行,得到如下结果:
1 | mysql> show variables like 'character%'; |
即可看到编码都为UTF-8啦~
v1.5.2