
由于Mysql配置了不支持远程连接引起的

如上图,显示我的网络通常。

- 3. 关闭防火墙或者开放
systemctl start firewalld.service
systemctl status firewalld.service
systemctl stop firewalld.service
#设置开机启用防火墙
systemctl enable firewalld.service
#设置开机禁用防火墙
systemctl disable firewalld.service
[root@atguigu ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 三 2022-06-22 22:06:26 CST; 26min ago
Docs: man:firewalld(1)
Main PID: 719 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─719 /usr/bin/python2 -Es /usr/sbin/firewalld --no...
6月 22 22:06:24 atguigu systemd[1]: Starting firewalld - dyna...
6月 22 22:06:26 atguigu systemd[1]: Started firewalld - dynam...
6月 22 22:06:26 atguigu firewalld[719]: WARNING: AllowZoneDri...
Hint: Some lines were ellipsized, use -l to show in full.
[root@atguigu ~]# systemctl stop firewalld
[root@atguigu ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since 三 2022-06-22 22:33:47 CST; 11s ago
Docs: man:firewalld(1)
Process: 719 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 719 (code=exited, status=0/SUCCESS)
6月 22 22:06:24 atguigu systemd[1]: Starting firewalld - dyna...
6月 22 22:06:26 atguigu systemd[1]: Started firewalld - dynam...
6月 22 22:06:26 atguigu firewalld[719]: WARNING: AllowZoneDri...
6月 22 22:33:47 atguigu systemd[1]: Stopping firewalld - dyna...
6月 22 22:33:47 atguigu systemd[1]: Stopped firewalld - dynam...
Hint: Some lines were ellipsized, use -l to show in full.
[root@atguigu ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=3306/tcp --permanent
重启防火墙
firewall-cmd --reload
use mysql;
select Host,User from user;
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
4 rows in set (0.00 sec)
可以看到root用户的当前主机配置信息为localhost。
Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。 user=root Host=localhost,表示只能通过本机客户端去访问。而 %是个 通配符 ,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连
接。如果 Host=% ,表示所有IP都有连接权限。
mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
4 rows in set (0.00 sec)
Host修改完成后记得执行flush privileges使配置立即生效:
flush privileges;
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yqk.20021027';
Query OK, 0 rows affected (0.01 sec)
如果是 MySQL8 版本,连接时还会出现如下问题:

解决方法:Linux下 mysql -u root -p 登录你的 mysql 数据库,然后 执行这条SQL:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
然后在重新配置SQLyog的连接,则可连接成功了,OK。
密码强度最好高一点。
show variables like 'character%';
# 或者
show variables like '%char%';


MySQL 5.7 默认的客户端和服务器都用了 latin1 ,不支持中文,保存中文会报错
vim /etc/my.cnf
在MySQL5.7或之前的版本中,在文件最后加上中文字符集配置:
character_set_server=utf8


systemctl restart mysqld
但是原库、原表的设定不会发生变化,参数修改只对新建的数据库生效。
MySQL有4个级别的字符集和比较规则,分别是:
show variables like 'character%';
| Variable_name | 解释 |
|---|---|
| character_set_server | 服务器级别的字符集 |
| character_set_database | 当前数据库的字符集 |
| character_set_client | 服务器解码请求时使用的字符集 |
| character_set_connection | 服务器处理请求时会把请求字符串从character_set_client转为character_set_connection |
| character_set_results | 服务器向客户端返回数据时使用的字符集 |
[server]
character_set_server=gbk # 默认字符集
collation_server=gbk_chinese_ci #对应的默认的比较规则
当服务器启动的时候读取这个配置文件后这两个系统变量的值便修改了。
CREATE DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
ALTER DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
CREATE TABLE 表名 (列的信息)
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 比较规则名称]]
ALTER TABLE 表名
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 比较规则名称]
如果创建和修改表的语句中没有指明字符集和比较规则,将使用该表所在数据库的字符集和比较规则作
为该表的字符集和比较规则。
CREATE TABLE 表名(
列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],
其他列...
);
ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
对于某个列来说,如果在创建和修改的语句中没有指明字符集和比较规则,将使用该列所在表的字符集
和比较规则作为该列的字符集和比较规则。
提示
在转换列的字符集时需要注意,如果转换前列中存储的数据不能用转换后的字符集进行表示会发生
错误。比方说原先列使用的字符集是utf8,列中存储了一些汉字,现在把列的字符集转换为ascii的
话就会出错,因为ascii字符集并不能表示汉字字符。
在 SQL 中,关键字和函数名是不用区分字母大小写的,比如 SELECT、WHERE、ORDER、GROUP BY 等关键字,以及 ABS、MOD、ROUND、MAX 等函数名。
不过在 SQL 中,你还是要确定大小写的规范,因为在 Linux 和 Windows 环境下,你可能会遇到不同的大
小写问题。 windows系统默认大小写不敏感 ,但是 linux系统是大小写敏感的 。
通过如下命令查看:
SHOW VARIABLES LIKE '%lower_case_table_names%'
lower_case_table_names参数值的设置:
默认为0,大小写敏感 。
两个平台上SQL大小写的区别具体来说:
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名、表名、表的别名、变量名是严格区分大小写的;
2、关键字、函数名称在 SQL 中不区分大小写;
3、列名(或字段名)与列的别名(或字段别名)在所有的情况下均是忽略大小写的;
MySQL在Windows的环境下全部不区分大小写
如果你的变量名命名规范没有统一,就可能产生错误。这里有一个有关命名规范的建议:
- 关键字和函数名称全部大写;
- 数据库名、表名、表别名、字段名、字段别名等全部小写;
- SQL 语句必须以分号结尾。