共计 3513 个字符,预计需要花费 9 分钟才能阅读完成。
Percona 官方提供了一个 Percona Docker 镜像,可以运行 Percona Server MySQL 和 Percona Server for MongoDB。
Docker 官方也提供了 Percona 镜像,具体见:Percona,但是这个镜像不是 Percona 官方提供的。
而在 Percona 官方提供的镜像中,针对每种存储引擎的镜像都有,具体见:
https://hub.docker.com/r/percona/
但是,目前 Percona 官方提供的镜像刚刚开始,还处于实验性阶段。
1、运行 Percona Server/MySQL 镜像
docker run --name container-name -e MYSQL_ROOT_PASSWORD=secret -d percona/percona-server:tag
container-name 是你为容器赋予的名字
secret 是 Percona 服务器 root 账户的密码
tag 是你想指定的 Percona 版本,目前有 4 个选择:latest、5.6、5.6.28、5.6.27。
要从另一个 Docker 容器的应用程序连接到 Percona Server 容器:
(假定 Percona 使用默认的 3306 端口)
docker run --name app-container-name --link container-name -d app-that-uses-mysql
从 MySQL 命令行客户端连接到 Percona Server 容器:
(下面的命令会从另一个 Docker 容器中运行 MySQL 命令行客户端,再连接到 Percona Server 容器)
docker run -it --link container-name --rm percona/percona-server:tag mysql -h container-name -P 3306 -uroot -psecret'
2、运行 Percona Server/MongoDB 镜像
要改变镜像的存储引擎很简单,比如换成 RocksDB 引擎,可以这样:
docker run --name psmdbrocks -d percona/percona-server-mongodb:latest --storageEngine=RocksDB
或者是换成 PerconaFT 存储引擎:
docker run --name psmdbperconaft -d percona/percona-server-mongodb:latest --storageEngine=PerconaFT
3、环境变量
在启动 Percona Server 容器时,可以通过 docker run 命令行传递一些环境变量来调整实例的运行配置。要注意,如果容器已经包含了数据库数据目录的话,那么这些环境变量会不起作用,也即任何预先存在于镜像中的数据库会使得环境变量无效。主要使用的环境变量有下面几个:
1)MYSQL_ROOT_PASSWORD
它表示 Percona 服务器 root 超级用户的密码。
2)MYSQL_RANDOM_ROOT_PASSWORD
如果这个值设置为 yes,表示 Percona 服务器 root 超级用户的密码为随机产生,且密码会输出到容器的控制台,可以使用命令 docker logs container-name 来找到密码。
3)MYSQL_ONETIME_PASSWORD
这是可选的环境变量,如果设置为 yes,表示 Percona 服务器 root 超级用户的密码是一次性的,会过期。当登陆 Percona 后,必须修改密码。这个特性必须在 5.6 及以后版本才支持。
4)MYSQL_DATABASE
这是可选的环境变量,它表示在容器启动时可以创建一个指定名字的数据库。如果后面的 user/password 都设置了,那么这个 user 将拥有对这个指定数据库的超级权限(等同于 GRANT ALL 命令)。
注意:这种方式不应该用于创建 root 账户。
5)MYSQL_ALLOW_EMPTY_PASSWORD
如果这个值设置为 yes,表示 Percona 服务器 root 超级用户的密码可以为空。
不推荐使用。
4、Percona 容器的安全
在很多场景下,使用 MYSQL_ROOT_PASSWORD 环境变量来指定 root 超级用户的密码是不安全的。所以安全的做法应该这样:使用 MYSQL_RANDOM_ROOT_PASSWORD 随机密码环境变量。如果想让实例更加安全,还可以使用 MYSQL_ONETIME_PASSWORD 一次性密码环境变量。
5、数据存储
运行在 Docker 容器的应用程序要存储数据有两种方法:
1)让 Docker 管理数据库数据的存储
通过把数据库文件写入主机系统磁盘(使用内部的卷管理),实现让 Docker 管理数据库数据的存储。这种方法,devicemapper、aufs、overlayfs 等对性能有很大影响。
2)在托管主机创建数据目录(在容器外部)
在托管主机上也即容器外部创建数据目录,且通过挂载使得此目录对容器可见。这种方法使得数据库文件易于被主机系统的工具或应用访问到。这种方法用于必须确保数据目录存在,且访问权限和其它安全机制都要设置正确。通常可以这样:
- 在主机系统适合的卷上创建数据目录,比如 /local/datadir
- 启动容器:
.
docker run --name container-name -v /local/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -d percona/percona-server:tag
- v 参数表示从主机系统挂载 /local/datadir 目录到容器内的 /var/lib/mysql 目录,它是 MySQL 写数据文件的位置。
还要注意主机系统的目录是否对容器有写权限,SELinux 要启用这个权限,执行:
chcon -Rt svirt_sandbox_file_t /local/datadir
如果启动 MySQL 容器实例使用已有的数据目录(即数据库已存在),那么在执行 docker run 命令时,MYSQL_ROOT_PASSWORD 变量应该省略。
6、端口转发
Docker 允许在容器内映射端口到主机系统的端口,使用 - p 选项。
docker run --name container-name `-p 6603:3306` -d percona/percona-server
mysql -h docker_host_ip -P 6603
这样就可以使用主机的 6603 端口连接到 MySQL 容器了。
7、传递参数给 MySQL 容器
还可以在 docker run 命令中传递任意参数给 MySQL 容器。
docker run --name my-container-name -d percona/percona-server --option1=value --option2=value
option1 和 option2 在容器启动时之间传递到 Percona 容器。比如想让容器使用 UTF- 8 作为字符集和 collation 的默认设置,可以这样:
docker run --name container-name -d percona/percona-server --character-set-server=utf8 --collation-server=utf8_general_ci
8、使用自定义的 MySQL 配置文件
MySQL 容器的启动配置文件是 /var/lib/mysql/my.cnf,如果想自定义这个配置文件,可以修改它。
如何在 CentOS 7 上安装 Percona Server http://www.linuxidc.com/Linux/2015-06/119144.htm
Percona Server 使用了一些 google-mysql-tools, Proven Scaling, Open Query 对 MySQL 进行改造。
CentOS 中编译安装 Percona Server 5.5.42 出现问题解决一例 http://www.linuxidc.com/Linux/2015-03/114279.htm
Percona Server 5.6 跟 5.5 的差异统计 http://www.linuxidc.com/Linux/2015-05/116975.htm
CentOS 中编译安装 Percona Server 5.5.42 出现问题解决一例 http://www.linuxidc.com/Linux/2015-03/114279.htm
Percona Server 的详细介绍 :请点这里
Percona Server 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-10/136424.htm