用Docker运行Percona Server

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50658687

用Docker运行Percona Server

作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

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,如果想自定义这个配置文件,可以修改它。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/671190

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。