本文介绍基于Docker的MySQL数据库的安装、配置及注意事项。
MySQL安装
- 搜索镜像
➜ ~ 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]
···
- 拉取镜像(指定版本)
➜ ~ docker pull mysql:5.7
- 运行命令
➜ ~ 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创建用户并授权
- 创建用户
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.