![剑指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=1736324669-nQ4Bb4tKuikLOmiO6VAeFK65Nb5Pmt8e-0-a385740082cec8b7656e8ce4d6b45360)
用户可以直接复制、粘贴初始化密码。但初始化密码一般比较复杂,在粘贴的时候,Linux并不会将其展示出来,直接按回车键即可,如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_39.jpg?sign=1736324669-AFDiktymMxYE7EpdqA5WEk1adefRk4E0-0-e4aaad4f1b7cf28bbe5e07f50c2f14a1)
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_40.jpg?sign=1736324669-VVXN8Bv9vauksCWy4uN99cPT3hJJusVn-0-05284105110bf8e153e856d448cc5254)
1.4.2 修改密码
因为初始化密码默认是过期的,所以登录MySQL会报错,需要执行如下命令修改密码。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_41.jpg?sign=1736324669-y0N4gDyLMtKMaW7v9KkV0FnWb33bdDJh-0-ef06404251e5f85b709d7801001d9f67)
结果如下所示,可以看到一直在报错,这意味着当前修改的密码无法满足密码安全策略的要求。这是因为在MySQL 5.7以后的版本(不含MySQL 5.7)中修改了密码安全策略(参见1.5.2节),新密码设置得太简单就会报错。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_42.jpg?sign=1736324669-TMOnkTFfbx0qcKgHY0E4Z1gT0IN6O0g0-0-3bfdb5477f0f80e975a657ad3696de4c)
执行如下命令修改为更复杂的密码后,用户就可以正常登录MySQL了。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_43.jpg?sign=1736324669-9FhDMA2M0f1GU1HB6yGE1jPltZBv8emc-0-df43d6d41a5c15fb733e8433b0ee16d5)
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=1736324669-aWLH3GLkMBlBc5hBqxw0rEeDNdN8NnER-0-ebb7318f25ae897267eaf3e4e4e3a992)
图1-11 使用SQLyog初次连接MySQL时的报错信息
2.确认网络是否畅通
针对上面的问题,我们首先要做的就是确认网络是否畅通,具体操作步骤为:第一步,在远程机器上执行“ping IP地址”命令查看网络是否畅通;第二步,在远程机器上执行“telnet”命令保证端口号开放访问,命令格式如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_45.jpg?sign=1736324669-FEwDc8YWVmPOO6pO79YYYo9sMK6kVGRo-0-93904fe1ea11884326ef264904ec35dc)
在Windows系统中开启Telnet功能的具体操作步骤如下。
第一步,打开控制面板,选择“程序和功能”选项,如图1-12所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_46.jpg?sign=1736324669-OrS43G7ApicbLauaJmqAocRfA6umRikf-0-55878294d5239db5316f013fe907be85)
图1-12 选择“程序和功能”选项
第二步,选择“启用或关闭Windows功能”选项,如图1-13所示。
第三步,在弹出的“Windows功能”对话框中勾选“Telnet客户端”复选框,单击“确定”按钮,即可开启Telnet功能,如图1-14所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_47.jpg?sign=1736324669-hCNxQPc1t6OE4N08DokSx6EH6IXYE2yw-0-ff3eb7dd587c2f361817f33f87553e28)
图1-13 选择“启用或关闭Windows功能”选项
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_48.jpg?sign=1736324669-6S743Y7Erm3SdfbDKjaj98YvyGqEY6OF-0-cbbb2714454b99c7dfc22b5ab3cd4e80)
图1-14 开启Telnet功能
3.关闭防火墙或开放MySQL端口
检查服务器是否关闭了防火墙或开放了MySQL端口,默认开放的端口是3306,也可以手动修改。CentOS 6和CentOS 7下与防火墙有关的操作命令如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_49.jpg?sign=1736324669-vXKZgGXsy0g9CzcmBpOqqULqbb6SLs43-0-21ad81da6e7128319fd161a7fb9fdbd6)
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_50.jpg?sign=1736324669-JgA1WKd2m8Lb4VMjJB6WMnO9TR79014Y-0-9ba58c79e784e214139a2f4f58cdb333)
执行上述关闭防火墙的命令会直接关闭防火墙,但在企业中通常采用的做法是开放固定端口,常用命令如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_51.jpg?sign=1736324669-dOvs6Xo817e0o9Unvwkg4VXzMc8OGskj-0-51be79fbf4dbe15678cce52cee8f654c)
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=1736324669-3vghdJ5BjLsKups1ST4LnKxY9by5Dc3P-0-18cae376dd9ddc5b0f352aefb8359951)
如果设置为“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=1736324669-HcFYaP7pIYgX10VUBnVw0UdS6kuhQQ0c-0-f96dc54ca81122a2b4b91b63eff7b6e6)
然后查看主机和用户信息,结果如下所示。可以看到,root用户对应的Host列的值为“%”,表示允许所有主机连接MySQL。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_54.jpg?sign=1736324669-8wWfxCVcvMU1MHTj9tHY4KuwPu0uHkIS-0-f4c78dc89b52c72b9de1d973d6aecef9)
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=1736324669-ItH1oOJTVt3jYMSmRnDYKRZVinr3iVeL-0-95583ef6afb50ca37c8179f99c759bba)
图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=1736324669-kWfEP0Dnm9SWzCpllys5Dlg1vvtu5m5i-0-18ff583b879df78406bfb037d273ff0b)
之后重新配置SQLyog连接,就可以连接成功。