前言

Mac 与 Linux 有都是类似 unix 系统,所以系统结构与软件安装上都类似,这里直接以 Mac 说明。

另外,utf8mb4 的最低 MySQL 版本支持版本为 5.5.3+,若不是,请升级到较新版本。

杀死 MySQL 进程

推荐方式

该方式只适用于使用包管理器安装形式。

在 Mac 上,可以直接在 系统偏好设置 中进行杀死/启动 MySQL 进程:

mac-mysql.png

mac-mysql-status.png

在 Linux 上可以直接使用 systemctl 命令查看 mysql 服务运行状态:

  1. sudo systemctl status mysql.service

输出示例:

  1. mysql.service - MySQL Community Server
  2. Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
  3. Active: active (running) since Mon 2021-04-19 10:43:04 UTC; 1min 23s ago
  4. Process: 782 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
  5. Process: 875 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS)
  6. Main PID: 908 (mysqld)
  7. Tasks: 27 (limit: 4585)
  8. Memory: 204.8M
  9. CGroup: /system.slice/mysql.service
  10. └─908 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
  11. Apr 19 10:42:58 ubuntu systemd[1]: Starting MySQL Community Server...
  12. Apr 19 10:43:04 ubuntu systemd[1]: Started MySQL Community Server.

停止 mysql 服务可以使用如下命令:

  1. sudo systemctl stop mysql

重启 mysql 服务可以使用如下命令:

  1. sudo systemctl restart mysql

暴力方式

先使用 ps 命令查看 MySQL 是否已启动:

  1. ps -ef | grep mysqld

如果能查到进程可以使用 kill -9/-15 PID 进行终止 MySQL 程序。比如:

  1. $ ps -ef | grep mysql | grep -v grep
  2. mysql 908 1 0 10:43 ? 00:00:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
  3. $ sudo kill -9 908

虽然这里是暴力方式但是还是推荐使用下面的方式:

MySQL 安装目录一般为:/usr/local/mysql(具体根据实际安装查看目录),在该目录下如下文件:

  1. $ ls /usr/local/mysql
  2. COPYING bin docs keyring man support-files
  3. README data include lib share

其中 support-files 目录就是 MySQL 启动与运行的相关脚本(下面是当前机器上的文件脚本):

  1. $ ls /usr/local/mysql/support-files/
  2. magic mysql-log-rotate mysql.server mysqld_multi.server

mysql.server 就是 MySQL 启动相关的脚本:

  1. # 杀死 MySQL 程序
  2. $ sudo ./mysql.server stop
  3. # 启动 MySQL 程序
  4. $ sudo ./mysql.server start
  5. # 重启 MySQL 程序
  6. $ sudo ./mysql.server restart

直接运行上诉命令即可,另外使用 ps 工具查出 MySQL 进程后也可以使用 kill -9/-15 PID 进行终止 MySQL 程序(建议使用 mysql.server 程序)。

创建与查看启动配置

通常,MySQL 的启动脚本为 my.cnf 但是根据各版本不同所以我们首选需要查看具体使用什么文件,以及应该放置在哪个目录。进入 MySQL 的安装 /bin 目录(如果已经配置环境变量则不需要),在该目录下有个 mysql 程序。

在命令终端输入 --help 查看说明:

  1. mysql --help

在输出的信息中,你会看到其中有如下信息:

  1. Default options are read from the following files in the given order:
  2. /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf

这段信息就是告诉你,MySQL 的启动配置文件名为 my.cnf,以及按优先级顺序放置的目录。所以,笔者就直接放在 /etc 目录下(如果该目录下没有 my.cnf 文件需要自行创建,另外通常在 support-files 目录下会有一个 my-default.cnf 文件,如果有直接拷贝并重名米为 my.cnf 放置在 /ect 目录下即可),因为笔者这里没有一个名为 my-default.cnf 的文件所以自行创建:

  1. $ cd /etc
  2. # 创建/编辑 my.cnf 文件
  3. $ sudo vim my.cnf
NOTE
一定要使用 sudo 命令,否则对 my.cnf 文件只有只读权限,编辑后将无法保存!

最后,在 my.cnf 增加/修改成如下(仅仅对编码而言,如果已经配置了其他选项不要修改)

  1. [client]
  2. port=3306
  3. # password=
  4. # 客户端编码
  5. default-character-set=utf8mb4
  6. [mysql]
  7. default-character-set=utf8mb4
  8. [mysqld]
  9. character-set-server = utf8mb4
  10. init_connect = "SET NAMES utf8mb4"
  11. collation-server = utf8mb4_unicode_ci
  12. character-set-client-handshake = false
  13. datadir=/usr/local/mysql/data/

注意: 在上面的信息中除了编码其他都是非必须项,比如 datadir 配置,因为笔者当前的 MySQL 存储目录为 /usr/local/mysql/data/(该目录也是 MySQL 默认目录)所以进行明确指定,如果不指定 MySQL 将会采用默认目录,这里做下说明!

编辑好之后按 ESC:wq 保存即可!

最后,重启 MySQL 服务:

  1. sudo ./mysql start

重启完成后,登录客户端:

  1. $ mysql -u root -p
  2. Enter password:

最后,在输入如下查询 SQL 语句查看编码信息:

  1. mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
  2. +--------------------------+-----------------------------------------------------------+
  3. | Variable_name | Value |
  4. +--------------------------+-----------------------------------------------------------+
  5. | character_set_client | utf8mb4 |
  6. | character_set_connection | utf8mb4 |
  7. | character_set_database | utf8mb4 |
  8. | character_set_filesystem | binary |
  9. | character_set_results | utf8mb4 |
  10. | character_set_server | utf8mb4 |
  11. | character_set_system | utf8 |
  12. | character_sets_dir | /usr/local/mysql-5.7.25-macos10.14-x86_64/share/charsets/ |
  13. | collation_connection | utf8mb4_unicode_ci |
  14. | collation_database | utf8mb4_unicode_ci |
  15. | collation_server | utf8mb4_unicode_ci |
  16. +--------------------------+-----------------------------------------------------------+

collation_connectioncollation_databasecollation_server 是什么没关系。

但必须保证如下几个变量必须是 utf8mb4

系统变量 描述
character_set_client 客户端来源数据使用的字符集
character_set_connection 连接层字符集
character_set_database 当前选中数据库的默认字符集
character_set_results 查询结果字符集
character_set_server 默认的内部操作字符集

数据库连接的配置

数据库连接参数中:

characterEncoding=utf8 会被自动识别为 utf8mb4,也可以不加这个参数,会自动检测。 而 autoReconnect=true 是必须加上的。

将数据库和已经建好的表也转换成 utf8mb4

更改数据库编码:

  1. ALTER DATABASE <DATABASE_NAME> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

更改表编码:

  1. ALTER TABLE <TABLE_NAME> CONVERT TO CHARACTER SET utf8mb4 COLLATEutf8mb4_general_ci;

如有必要,还可以更改列的编码