• 用Docker执行Percona Server


    用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账户的password
    tag是你想指定的Percona版本号,眼下有4个选择:latest、5.6、5.6.28、5.6.27。

    要从还有一个Docker容器的应用程序连接到Percona Server容器:
    (假定Percona使用默认的3306port)

    docker run --name app-container-name --link container-name -d app-that-uses-mysql
    

    从MySQL命令行client连接到Percona Server容器:
    (以下的命令会从还有一个Docker容器中执行MySQL命令行client,再连接到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镜像

    要改变镜像的存储引擎非常easy,比方换成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超级用户的password。

    2)MYSQL_RANDOM_ROOT_PASSWORD
    假设这个值设置为yes,表示Percona服务器root超级用户的password为随机产生,且password会输出到容器的控制台,能够使用命令docker logs container-name来找到password。

    3)MYSQL_ONETIME_PASSWORD
    这是可选的环境变量,假设设置为yes。表示Percona服务器root超级用户的password是一次性的,会过期。当登陆Percona后,必须改动password。

    这个特性必须在5.6及以后版本号才支持。

    4)MYSQL_DATABASE
    这是可选的环境变量,它表示在容器启动时能够创建一个指定名字的数据库。假设后面的user/password都设置了,那么这个user将拥有对这个指定数据库的超级权限(等同于GRANT ALL命令)。


    注意:这样的方式不应该用于创建root账户。

    5)MYSQL_ALLOW_EMPTY_PASSWORD
    假设这个值设置为yes,表示Percona服务器root超级用户的password能够为空。
    不推荐使用。

    4、Percona容器的安全

    在非常多场景下,使用MYSQL_ROOT_PASSWORD环境变量来指定root超级用户的password是不安全的。所以安全的做法应该这样:使用MYSQL_RANDOM_ROOT_PASSWORD随机password环境变量。假设想让实例更加安全,还能够使用MYSQL_ONETIME_PASSWORD一次性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、port转发

    Docker同意在容器内映射port到主机系统的port。使用-p选项。

    docker run --name container-name `-p 6603:3306` -d percona/percona-server
    mysql -h docker_host_ip -P 6603
    

    这样就能够使用主机的6603port连接到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,假设想自己定义这个配置文件,能够改动它。

  • 相关阅读:
    优化慢执行或慢查询的方法
    Top K问题的两种解决思路
    优先队列实现 大小根堆 解决top k 问题
    进程间的八种通信方式----共享内存是最快的 IPC 方式
    二叉树基础之按层打印
    按层打印二叉树--每行打印一层
    给定一颗完全二叉树,给每一层添加上next的指针,从左边指向右边
    缓存与数据库一致性保证
    一致性哈希算法原理
    Linux复制指定目录下的文件夹结构
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7231295.html
Copyright © 2020-2023  润新知