![剑指MySQL:架构、调优与运维](https://wfqqreader-1252317822.image.myqcloud.com/cover/193/52921193/b_52921193.jpg)
1.4 登录MySQL
1.4.1 首次登录
前面已经完成MySQL的安装并且成功启动,接下来登录MySQL。可以执行“mysql-uroot-p”命令登录MySQL,在“Enter password:”后面输入初始化密码。日志中会记录一份初始化密码。查看初始化密码,结果如下所示,最后的加粗内容就是本次安装的初始化密码。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_38.jpg?sign=1738772206-fXpgnexVdJdIFAXAjVgAefs9KVK0P7lg-0-8d29a27be1d981bafae323bf805e1509)
用户可以直接复制、粘贴初始化密码。但初始化密码一般比较复杂,在粘贴的时候,Linux并不会将其展示出来,直接按回车键即可,如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_39.jpg?sign=1738772206-orDk8N8t1IFkjZ7oumwaxXkJaKCl8Vbm-0-e48620b32aad43d08d7b8410c426f76d)
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_40.jpg?sign=1738772206-PZ2ENtImuCEuMlHJ6JR8RQTrg0x7A2rB-0-00d653c261b0386547ad9e9ac9388f03)
1.4.2 修改密码
因为初始化密码默认是过期的,所以登录MySQL会报错,需要执行如下命令修改密码。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_41.jpg?sign=1738772206-mLSYDvASiXDPIWDY9ZInmFFB4Q6C9Bwd-0-87ac0f8a4811b99547ed07ee9d69859c)
结果如下所示,可以看到一直在报错,这意味着当前修改的密码无法满足密码安全策略的要求。这是因为在MySQL 5.7以后的版本(不含MySQL 5.7)中修改了密码安全策略(参见1.5.2节),新密码设置得太简单就会报错。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_42.jpg?sign=1738772206-4x5YMCPOLsdZSDDQBUj0r5hHPc0UIVf5-0-41970d4ea929c4eb64b111230e0b5400)
执行如下命令修改为更复杂的密码后,用户就可以正常登录MySQL了。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_43.jpg?sign=1738772206-gT1o24Eo7o8oS7Z4ois0yCi2qEHvXAun-0-27c93f11c40ca53acb21c1a2a026fb40)
1.4.3 设置远程登录
1.当前问题
虽然在Linux本地可以登录MySQL,但在日常使用中极不方便。接下来我们使用客户端工具SQLyog或Navicat远程连接MySQL。初次连接时可能会出现如图1-11所示的报错信息,这是因为MySQL不支持远程连接。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_44.jpg?sign=1738772206-KPPZYVKvqFoW2waISWmO0neLU0JrogDd-0-44a0d6423e5330099f6c5abba3c8017a)
图1-11 使用SQLyog初次连接MySQL时的报错信息
2.确认网络是否畅通
针对上面的问题,我们首先要做的就是确认网络是否畅通,具体操作步骤为:第一步,在远程机器上执行“ping IP地址”命令查看网络是否畅通;第二步,在远程机器上执行“telnet”命令保证端口号开放访问,命令格式如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_45.jpg?sign=1738772206-1Zw8x0trN6SseebuRQDgmvhvxHGGnOnd-0-3a0d5056eab7776b9b5abb2ef0a87148)
在Windows系统中开启Telnet功能的具体操作步骤如下。
第一步,打开控制面板,选择“程序和功能”选项,如图1-12所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_46.jpg?sign=1738772206-41AGgkSFeJiOfsuru4qzqKOCMzJqBoM5-0-65ec9b9c2312e41a56e1dd01e101bef0)
图1-12 选择“程序和功能”选项
第二步,选择“启用或关闭Windows功能”选项,如图1-13所示。
第三步,在弹出的“Windows功能”对话框中勾选“Telnet客户端”复选框,单击“确定”按钮,即可开启Telnet功能,如图1-14所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_47.jpg?sign=1738772206-eDmeFnKf1A0wRYcVtUx1vl8GK5UZYdWO-0-495eb5964d12afc0709e0408f32cbe91)
图1-13 选择“启用或关闭Windows功能”选项
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_48.jpg?sign=1738772206-tTVE9l14HplEq3TtMHw8unJkJEFHIxwp-0-7bfc6de7c8d6cef523a49313174dbc55)
图1-14 开启Telnet功能
3.关闭防火墙或开放MySQL端口
检查服务器是否关闭了防火墙或开放了MySQL端口,默认开放的端口是3306,也可以手动修改。CentOS 6和CentOS 7下与防火墙有关的操作命令如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_49.jpg?sign=1738772206-Xs4QEoM2TYBgEcSYfiYLdCGDw0KhDEBe-0-1d63e5fc5e3b14224bc963bddeca6601)
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_50.jpg?sign=1738772206-pPbGcx83Jl7rZs4Ycg9RDlBDnDXK01ZF-0-2e344216dc318a55a0616193707470b1)
执行上述关闭防火墙的命令会直接关闭防火墙,但在企业中通常采用的做法是开放固定端口,常用命令如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_51.jpg?sign=1738772206-L2zeysOL0FSjifRyNuLWvyk00pTBEvby-0-c2be21d2247e66af20aec0e4c44e0f5d)
4.在Linux平台下设置Host列的值
首先在Linux平台下查看当前MySQL允许哪些IP地址连接,如下所示。其中,Host列指定了允许用户登录所使用的IP地址,可以看到root用户对应的Host列的值为“localhost”,表示只允许本机客户端连接MySQL。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_52.jpg?sign=1738772206-1uiOi08T1sN73EGjoHUacOx6aNCIItaT-0-d1a27e7dc014d28efd0d84e0c2d5354a)
如果设置为“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语句如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_53.jpg?sign=1738772206-eO1LaOzL28e1is1v0eVRa54Agrjm2mYU-0-e4a921f52180f6891289fe7a21828731)
然后查看主机和用户信息,结果如下所示。可以看到,root用户对应的Host列的值为“%”,表示允许所有主机连接MySQL。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_54.jpg?sign=1738772206-i08xEXJOYTsrYA1WS4lRwmcl8U15u0VQ-0-4ab49a23dccc5279c0d0bd275d4d6c46)
Host列的值设置完成后,执行“flush privileges”命令即可使该设置立即生效。
5.测试
如果用户使用的是MySQL 5.7,接下来就可以使用客户端工具SQLyog或Navicat远程连接MySQL。如果用户使用的是MySQL 8.0,那么连接时还会出现如图1-15所示的报错信息。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_55.jpg?sign=1738772206-gsp56r1gEYb9BznlYuS2QT4vjOGkiSlW-0-f50f42573e32bc24392324a15eab5594)
图1-15 测试远程连接MySQL报错“2058”
从图1-15中可以看到,报错信息的最后一部分是乱码,意思是“插件缓存_sha2_密码无法进行加载”。这是因为MySQL修改了密码安全策略,SQLyog未能正确解析使用。为此,可以先在服务器环境下执行“mysql-u root-p”命令登录MySQL,再执行如下SQL语句(语句最后的“password”输入的是用户自己设置的密码)。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_56.jpg?sign=1738772206-w7ITWaHx7pWaglyOY3S1qK8ANE7b2mOK-0-7ba36834b17dc118ae1c3b644ab6d202)
之后重新配置SQLyog连接,就可以连接成功。