1.4 登录MySQL
1.4.1 首次登录
前面已经完成MySQL的安装并且成功启动,接下来登录MySQL。可以执行“mysql-uroot-p”命令登录MySQL,在“Enter password:”后面输入初始化密码。日志中会记录一份初始化密码。查看初始化密码,结果如下所示,最后的加粗内容就是本次安装的初始化密码。
用户可以直接复制、粘贴初始化密码。但初始化密码一般比较复杂,在粘贴的时候,Linux并不会将其展示出来,直接按回车键即可,如下所示。
1.4.2 修改密码
因为初始化密码默认是过期的,所以登录MySQL会报错,需要执行如下命令修改密码。
结果如下所示,可以看到一直在报错,这意味着当前修改的密码无法满足密码安全策略的要求。这是因为在MySQL 5.7以后的版本(不含MySQL 5.7)中修改了密码安全策略(参见1.5.2节),新密码设置得太简单就会报错。
执行如下命令修改为更复杂的密码后,用户就可以正常登录MySQL了。
1.4.3 设置远程登录
1.当前问题
虽然在Linux本地可以登录MySQL,但在日常使用中极不方便。接下来我们使用客户端工具SQLyog或Navicat远程连接MySQL。初次连接时可能会出现如图1-11所示的报错信息,这是因为MySQL不支持远程连接。
图1-11 使用SQLyog初次连接MySQL时的报错信息
2.确认网络是否畅通
针对上面的问题,我们首先要做的就是确认网络是否畅通,具体操作步骤为:第一步,在远程机器上执行“ping IP地址”命令查看网络是否畅通;第二步,在远程机器上执行“telnet”命令保证端口号开放访问,命令格式如下所示。
在Windows系统中开启Telnet功能的具体操作步骤如下。
第一步,打开控制面板,选择“程序和功能”选项,如图1-12所示。
图1-12 选择“程序和功能”选项
第二步,选择“启用或关闭Windows功能”选项,如图1-13所示。
第三步,在弹出的“Windows功能”对话框中勾选“Telnet客户端”复选框,单击“确定”按钮,即可开启Telnet功能,如图1-14所示。
图1-13 选择“启用或关闭Windows功能”选项
图1-14 开启Telnet功能
3.关闭防火墙或开放MySQL端口
检查服务器是否关闭了防火墙或开放了MySQL端口,默认开放的端口是3306,也可以手动修改。CentOS 6和CentOS 7下与防火墙有关的操作命令如下所示。
执行上述关闭防火墙的命令会直接关闭防火墙,但在企业中通常采用的做法是开放固定端口,常用命令如下所示。
4.在Linux平台下设置Host列的值
首先在Linux平台下查看当前MySQL允许哪些IP地址连接,如下所示。其中,Host列指定了允许用户登录所使用的IP地址,可以看到root用户对应的Host列的值为“localhost”,表示只允许本机客户端连接MySQL。
如果设置为“Host=192.168.1.1”,则表示只允许IP地址为192.168.1.1的客户端连接MySQL。如果设置为“Host=localhost”,则表示只允许本机客户端连接MySQL。
另外,还允许Host列的值中包含通配符“%”。如果设置为“Host=192.168.1.%”,则表示IP地址前缀为“192.168.1.”的客户端都可以连接MySQL。如果设置为“Host=%”,则表示所有IP地址都有连接权限。需要注意的是,不能为了省事就将Host列的值直接设置为通配符“%”,因为这样做会存在安全隐患。用户可以根据需要对Host列的值进行设置。本书中将Host列的值直接设置为通配符“%”是为了方便讲解,SQL语句如下所示。
然后查看主机和用户信息,结果如下所示。可以看到,root用户对应的Host列的值为“%”,表示允许所有主机连接MySQL。
Host列的值设置完成后,执行“flush privileges”命令即可使该设置立即生效。
5.测试
如果用户使用的是MySQL 5.7,接下来就可以使用客户端工具SQLyog或Navicat远程连接MySQL。如果用户使用的是MySQL 8.0,那么连接时还会出现如图1-15所示的报错信息。
图1-15 测试远程连接MySQL报错“2058”
从图1-15中可以看到,报错信息的最后一部分是乱码,意思是“插件缓存_sha2_密码无法进行加载”。这是因为MySQL修改了密码安全策略,SQLyog未能正确解析使用。为此,可以先在服务器环境下执行“mysql-u root-p”命令登录MySQL,再执行如下SQL语句(语句最后的“password”输入的是用户自己设置的密码)。
之后重新配置SQLyog连接,就可以连接成功。