zoukankan      html  css  js  c++  java
  • 基于docker的mysql主从复制

    一、下载官方的mysql镜像,我用的https://dashboard.daocloud.io/orgs/zuikc/packages/explore国内的加速镜像,一般国外的比较慢

    1. 在 terminal 中登录 docker login daocloud.io
    2. 输入 docker pull 并复制粘贴以下镜像地址
    daocloud.io/library/mysql:latest
     

    下载完成后查看镜像:

    二、生成容器 

    生成容器时,调用的启动脚本是/entrypoint.sh;通过查看/entrypoint.sh脚本内容,总结参数如下

    mysqld #启动mysql服务,必须使用
    MYSQL_ROOT_PASSWORD #设置mysql的root密码,必须使用
    
    #以下二个参数添加除root之外的用户并设置密码,可选。
    MYSQL_USER 
    MYSQL_PASSWORD
    
    #设置生成容器时需要新建的数据库,可选
    MYSQL_DATABASE
    #容器的mysql数据库默认的保存路径是:
    /var/lib/mysql
    #容器的配置文件my.cnf的路径为:
    /etc/mysql/my.cnf

    使用上要的参数生成新的容器:

    docker run -d -p 3307:3306 --name mysql  -P  -e mysqld -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=yope -e MYSQL_PASSWORD=yope -e MYSQL_DATABASE=testDb -v /mysql_data:/var/lib/mysql  daocloud.io/library/mysql

    查看容器:

    docker ps -a

    重要参数说明:

     --name mysql

    指定容器名称为 mysql;

    -p 3307:3306

    指定映射端口 将宿主机端口3307映射到容器3306端口;

    -v /mysql_data:/var/lib/mysql

    映射数据库存放位置。将宿主机的目录“/mysql_data”映射到容器的“/var/lib/mysql”目录;这是因为默认情况下数据库的数据库文件和日志文件都会存放于容器的AUFS文件层,这不仅不使得容器变得越来越臃肿,不便于迁移、备份等管理,而且数据库的性能也会受到影响。因此建议挂载到宿主机的目录到容器内。

    查看本地的mysql_data是否生成容器内的数据库:

    [root@localhost /]# ll /mysql_data/
    总用量 188452
    -rw-r----- 1 systemd-bus-proxy ssh_keys       56 8月  20 22:25 auto.cnf
    -rw-r----- 1 systemd-bus-proxy ssh_keys     1329 8月  20 22:25 ib_buffer_pool
    -rw-r----- 1 systemd-bus-proxy ssh_keys 79691776 8月  20 22:25 ibdata1
    -rw-r----- 1 systemd-bus-proxy ssh_keys 50331648 8月  20 22:25 ib_logfile0
    -rw-r----- 1 systemd-bus-proxy ssh_keys 50331648 8月  20 22:25 ib_logfile1
    -rw-r----- 1 systemd-bus-proxy ssh_keys 12582912 8月  20 22:25 ibtmp1
    drwxr-x--- 2 systemd-bus-proxy ssh_keys     4096 8月  20 22:25 mysql
    drwxr-x--- 2 systemd-bus-proxy ssh_keys     8192 8月  20 22:25 performance_schema
    drwxr-x--- 2 systemd-bus-proxy ssh_keys     8192 8月  20 22:25 sys
    drwxr-x--- 2 systemd-bus-proxy ssh_keys       19 8月  20 22:25 testDb
    [root@localhost /]# 

    已经生成相关的文件和默认数据库,同时也新建了"testDb"数据库.

    测试:

    在宿主机上通过端口访问容器中的mysql服务

    测试登录:

    mysql -u root -p123456 -h docker宿主机ip -P 3307
    
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MySQL connection id is 2
    Server version: 5.7.13 MySQL Community Server (GPL)
    Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    MySQL [(none)]> 

    三、进入到新生成的容器 (名为mysql的容器)

    使用exec进入容器,同时进行相关操作: 

    [root@localhost /]# docker exec -it mysql /bin/bash

    查看进程:

    root@492ffa26d865:/# ps -aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    mysql         1  0.2  9.7 1262696 182200 ?      Ssl  14:52   0:00 mysqld
    root        127  0.2  0.1  20216  1884 ?        Ss   14:57   0:00 /bin/bash
    root        133  0.0  0.0  17492  1148 ?        R+   14:58   0:00 ps -aux

    查看数据库所在的文件夹:

    root@492ffa26d865:/# ls -l /var/lib/mysql/
    total 188452
    -rw-r----- 1 mysql mysql       56 Aug 20 14:52 auto.cnf
    -rw-r----- 1 mysql mysql     1329 Aug 20 14:52 ib_buffer_pool
    -rw-r----- 1 mysql mysql 50331648 Aug 20 14:52 ib_logfile0
    -rw-r----- 1 mysql mysql 50331648 Aug 20 14:52 ib_logfile1
    -rw-r----- 1 mysql mysql 79691776 Aug 20 14:52 ibdata1
    -rw-r----- 1 mysql mysql 12582912 Aug 20 14:52 ibtmp1
    drwxr-x--- 2 mysql mysql     4096 Aug 20 14:52 mysql
    drwxr-x--- 2 mysql mysql     8192 Aug 20 14:52 performance_schema
    drwxr-x--- 2 mysql mysql     8192 Aug 20 14:52 sys
    drwxr-x--- 2 mysql mysql       19 Aug 20 14:52 testDb

    进入mysql:

    root@492ffa26d865:/# mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 3
    Server version: 5.7.13 MySQL Community Server (GPL)
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    mysql>

    四、修改容器中mysql的配置文件 

    默认镜像中并没有安装vi或者vim,需要手工安装

    root@492ffa26d865:/# apt-get update && apt-get -yq install vim

    然后就可以使用vim 来修改mysql的配置文件:

    root@492ffa26d865:/# vim /etc/mysql/my.cnf

    vim编辑器在此不做详述。

    如果已经有一个比较成熟的my.cnf的配置方案,可以在宿主机上新建一个文件夹将已经设置好的my.cnf和conf.d这二个文件放到里面,

    然后在新建容器的时候,直接使用参数”-v” 将这个文件夹映射到容器的”/etc/mysql”目录上即可。

     ***************************************************************************12-04************************************************

    修改数据的登录密码

    alter user root@localhost identified by 'password'  代表本地登录用户

    alter user root@% identified by 'password'  代表所有链接到root的主机

    *****************************************************************2018-12-08更新*****************************

    有时候用官方镜像创建挂在目录的时候失败,是因为权限的问题,默认镜像是一mysql用户组运行,而挂在的宿主机的目录是root或者别的组的权限,所以不对应,造成权限问题

    这时候需要添加用户组,并修改用户组的权限

    1,groupadd mysql
    2,useradd -r -g mysql -s /bin/false mysql
    3,chown -R mysql:mysql /mysql_data

    这个时候再挂在目录就可以了

  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/albertzhangyu/p/10055818.html
Copyright © 2011-2022 走看看