![剑指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=1739254809-MGkgYU9DcncHFXLoLipfZ7INLDvhliHi-0-d97a259fd51ddd65e7574b8f51647bff)
用户可以直接复制、粘贴初始化密码。但初始化密码一般比较复杂,在粘贴的时候,Linux并不会将其展示出来,直接按回车键即可,如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_39.jpg?sign=1739254809-Lc8LrhjDmZpSbTzvNB2CWiPQGo4uKeEn-0-ba6895ed83d16ae80a1b57dcc7f7135b)
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_40.jpg?sign=1739254809-DJXh5Lh05vGJpmoQJVqD0A6e5vLMZcyE-0-99324aa9656bc1599b323976bcf538ab)
1.4.2 修改密码
因为初始化密码默认是过期的,所以登录MySQL会报错,需要执行如下命令修改密码。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_41.jpg?sign=1739254809-7DwimbRGbZnZoH6tpYMRsbxeJoqHYnnO-0-5a7164fde44d3c593e81a62a82fe28b7)
结果如下所示,可以看到一直在报错,这意味着当前修改的密码无法满足密码安全策略的要求。这是因为在MySQL 5.7以后的版本(不含MySQL 5.7)中修改了密码安全策略(参见1.5.2节),新密码设置得太简单就会报错。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_42.jpg?sign=1739254809-GZ82q1axrovfxxltnhmhI79eE30RokgG-0-bb2b5a91cb8836ba3e46ccdb86563284)
执行如下命令修改为更复杂的密码后,用户就可以正常登录MySQL了。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_43.jpg?sign=1739254809-ipnbnrl7nd47zjWYGH5rquiR3CqMIJ6C-0-1aa4cd7ee80b0cefdb4dbe5e031a7e4c)
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=1739254809-pcfuTwH8dzjBG94ou2m0kQ2fp5bMyLTW-0-afb71922567c25f018d2b88db58bbe58)
图1-11 使用SQLyog初次连接MySQL时的报错信息
2.确认网络是否畅通
针对上面的问题,我们首先要做的就是确认网络是否畅通,具体操作步骤为:第一步,在远程机器上执行“ping IP地址”命令查看网络是否畅通;第二步,在远程机器上执行“telnet”命令保证端口号开放访问,命令格式如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_45.jpg?sign=1739254809-bCkh134YwpvEHDNGXjiYnLuYGJmOeH1P-0-005e05d13e828950c7515d4265ed744f)
在Windows系统中开启Telnet功能的具体操作步骤如下。
第一步,打开控制面板,选择“程序和功能”选项,如图1-12所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_46.jpg?sign=1739254809-p6QqUTRnUMCMB82jKqST5Y60ujqlSgUW-0-4d62329301e1f72ae14bceddf716909f)
图1-12 选择“程序和功能”选项
第二步,选择“启用或关闭Windows功能”选项,如图1-13所示。
第三步,在弹出的“Windows功能”对话框中勾选“Telnet客户端”复选框,单击“确定”按钮,即可开启Telnet功能,如图1-14所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_47.jpg?sign=1739254809-QU0GLH4fMq3bHQG378g0vBmnz7ZPiSEI-0-9056e4946bf0184ee469e21118e666cb)
图1-13 选择“启用或关闭Windows功能”选项
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_48.jpg?sign=1739254809-rOt3ihEOea3WY9rMoJUHWd5Hr2FIxguI-0-7078364cb7874d2e1e3878f73f10e0a0)
图1-14 开启Telnet功能
3.关闭防火墙或开放MySQL端口
检查服务器是否关闭了防火墙或开放了MySQL端口,默认开放的端口是3306,也可以手动修改。CentOS 6和CentOS 7下与防火墙有关的操作命令如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_49.jpg?sign=1739254809-nyxDyYJEYgaWdO6gLpT715RpjocMcFZQ-0-d99f37b32c2fec4a920c183ba86cf3e9)
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_50.jpg?sign=1739254809-jordtQEFtDDCO4gV8apCP1fZOiO89apI-0-8a3607c3915963e433c89d628a35bc3f)
执行上述关闭防火墙的命令会直接关闭防火墙,但在企业中通常采用的做法是开放固定端口,常用命令如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_51.jpg?sign=1739254809-K4Gy0Wsk335xYHkrZaWflQjxChhaRpRo-0-507bc072197a1fa517bcf1d3ab55a14b)
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=1739254809-KncjCoqXuclnjxtR4bh9Bf9YJ3hJTS0p-0-1e7e1d9ab97057ab106cab58f085165e)
如果设置为“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=1739254809-DnU9Dzei7fdUk02G2w95ToHHn8RQ7Kmh-0-71b659839328611fbb6904af643dc248)
然后查看主机和用户信息,结果如下所示。可以看到,root用户对应的Host列的值为“%”,表示允许所有主机连接MySQL。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_54.jpg?sign=1739254809-phLnnOmImakCnDuXX8PVT70MYp9oraOg-0-a3a43542edad550dc18dfba6cb372116)
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=1739254809-yM3CnHAfqkv6rmWS5WeYSR1E2MvN7RPX-0-86eeef409b58bb9305f800b55efb9ada)
图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=1739254809-VNnT0tmGqo50Re8KWAnjMikzanA9FRHM-0-b7dc515a17958c5f42d529f9f870e82f)
之后重新配置SQLyog连接,就可以连接成功。