本文介绍基于Docker的MySQL数据库的安装、配置及注意事项。

MySQL安装

  1. 搜索镜像
➜  ~ docker search mysql
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                                                  MySQL is a widely used, open-source relation…   7859                [OK]
mariadb                                                MariaDB is a community-developed fork of MyS…   2608                [OK]
mysql/mysql-server                                     Optimized MySQL Server Docker images. Create…   592                                     [OK]
···

  1. 拉取镜像(指定版本)
➜  ~ docker pull mysql:5.7
  1. 运行命令
➜  ~ docker run --name mysql \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-v /etc/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD='root' \
-d mysql:5.7
  • -p 3306:3306 将docker容器3306端口映射到本机3306端口。
  • -v /data/mysql:/var/lib/mysql 将主机 /data/mysql 目录挂载到容器的 /var/lib/mysql
  • -v /etc/mysql/conf.d:/etc/mysql/conf.d 将主机 /etc/mysql/conf.d 目录挂载到容器的对应目录,此目录为配置目录,方便对mysql配置进行管理。
  • -e MYSQL_ROOT_PASSWORD='root' 初始化root密码。-e 传参数
  • -d 后台运行

MySQL创建用户并授权

  1. 创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
  • @localhost 表示只允许本本机进行连接,如果需要外网(ip)连接,一般使用 % 替换。

2.授权

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

完成授权后,请务必重新加载所有权限。

FLUSH PRIVILEGES;
  • * . * 表示授予该用户所有数据库下的所有权限(root权限),切忌在生产环境这样操作,非常危险。一般按业务給不同用户不同的权限。

给数据分析用户只读从库的权限:

GRANT SELECT ON database_name . table_name  TO 'data'@'localhost';

给程序授权某张表的全部权限:

GRANT ALL PRIVILEGES ON database_name . table_name  TO 'username'@'localhost';

MySQL配置

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
  • 这里直接使用 utf8mb4 而不要使用 utf8 ,实际应用中 utf8 编码无法存储一些特殊字符,比如 emoji 表情,昵称、评论、帖子等都有可能受到影响。(最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范(utf8mb4)只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面)。
  • 新建mysql库或者表的时候还有一个排序规则。utf8_unicode_ci 比较准确,utf8_general_ci 速度比较快。通常情况下 utf8_general_ci 的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是 utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci 就可以了。

参考文献

相关文章

Q.E.D.