zoukankan      html  css  js  c++  java
  • 【架构】docker环境搭建mysql主从

    本文主要研究怎么在docker上搭建mysql的主从。因为在单机搭建mysql多实例然后再配主从,感觉太痛苦了,环境各有不同,配置各不大相 同,从网上找搭建方法,试了半天也没成功,最后也没耐心调试下去了,浪费了好多时间。觉得还是应该用先进的技术来避免这种时间的浪费,正好docker可 以用上。

    搭好的镜像

    google到tutum搭建好的mysql的docker镜像,关键的是人家也帮你弄好了主从的命令。

    git clone https://github.com/tutumcloud/mysql.git

    根据Dockerfile构建镜像

    docker build -t xixicat/mysql5.6 5.6/
    ......
    Step 6 : ADD import_sql.sh /import_sql.sh
     ---> 8e105223fa8b
    Removing intermediate container add786317f4a
    Step 7 : ADD run.sh /run.sh
     ---> 6d3e93df4d46
    Removing intermediate container 9d959e1f9684
    Step 8 : ENV MYSQL_USER admin MYSQL_PASS **Random** ON_CREATE_DB **False** REPLICATION_MASTER **False** REPLICATION_SLAVE **False** REPLICATION_USER replica REPLICATION_PASS replica ON_CREATE_DB **False**
     ---> Running in 8d4857d7bf16
     ---> 1329735e7b3a
    Removing intermediate container 8d4857d7bf16
    Step 9 : VOLUME /etc/mysql /var/lib/mysql
     ---> Running in 1e654949edf5
     ---> 2c88ab58a842
    Removing intermediate container 1e654949edf5
    Step 10 : EXPOSE 3306
     ---> Running in f349784d176a
     ---> 412c34a688cf
    Removing intermediate container f349784d176a
    Step 11 : CMD /run.sh
     ---> Running in 5d81fa8627e2
     ---> ccdd6bddfcf1
    Removing intermediate container 5d81fa8627e2
    Successfully built ccdd6bddfcf1

    其中-t参数为给镜像贴个标签"xixicat/mysql",后面的参数为Dockerfile文件所在的文件夹的路径

    查看镜像

    ➜  docker-mysql git:(master) ✗ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
    xixicat/mysql5.6    latest              0dbd5f7ff4c0        About a minute ago   471.8 MB
    xixicat/mysql       latest              ccdd6bddfcf1        3 hours ago          317.8 MB
    ubuntu              14.04               c4bea91afef3        13 days ago          187.9 MB
    ubuntu              trusty              c4bea91afef3        13 days ago          187.9 MB

    启动容器

    启动master

    docker run -d -e REPLICATION_MASTER=true -e REPLICATION_PASS=admin -e MYSQL_PASS=admin -e MYSQL_USER=admin -p 3307:3307 -v /Users/xixicat/devtool/docker-mysql/5.5/data/master:/var/lib/mysql --name mysql xixicat/mysql5.6

    参数解释:

    • -d,表示Detached mode,后台运行

    • -t,让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上

    • -i,让容器的标准输入保持打开,可以-it配合用,与-d相对应

    • -e,表示传入的环境变量

    • -p,表示暴露的端口,即本机端口与docker端口映射

    • -v,表示挂载文件,这里挂载了本地的文件夹到docker的文件夹

    • --name,表示给容器起的名字,方便查看,若要配置主从,这里需要指定为mysql,我表示已经采坑。

    启动后查看容器:

    ~  docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                              NAMES
    66dbc9aa02d4        xixicat/mysql5.6       "/run.sh"           3 seconds ago       Up 2 seconds        3306/tcp, 0.0.0.0:3307->3307/tcp   mysql

    登陆mysql:

    mysql -uadmin -P3307

    删除容器(备用):

    docker ps -a
    docker stop masterDb
    docker rm masterDb

    查看启动logs(启动不起来时查看):

    docker logs masterDb

    启动slave

    docker run -d -e REPLICATION_SLAVE=true -e MYSQL_PASS=admin -e MYSQL_USER=admin -p 3308:3308 -v /Users/xixicat/devtool/docker-mysql/5.6/data/slave:/var/lib/mysql --name slaveDb --link mysql:mysql xixicat/mysql5.6

    参数解释:

    • --link,该参数的格式为--link name:alias,其中name是要链接的容器的名称,alias是这个连接的别名,若要创建主从这里也指定为mysql:mysql,表示已经采坑。

    查看容器:

     master git:(master) docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                              NAMES
    04fed79e8787        xixicat/mysql       "/run.sh"           3 seconds ago       Up 3 seconds        3306/tcp, 0.0.0.0:3308->3308/tcp   slaveDb
    66dbc9aa02d4        xixicat/mysql       "/run.sh"           6 minutes ago       Up 27 seconds       3306/tcp, 0.0.0.0:3307->3307/tcp   mysql

    登陆看看:

    mysql -uadmin -P3308

    遇到的错误

    症状

    容器启动一阵子就自动关闭了,然后去docker logs mysql查看日志,发现错误:

    160118 15:08:57 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
    160118 15:08:57 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
    160118 15:08:57 [Note] /usr/sbin/mysqld (mysqld 5.5.46-0ubuntu0.14.04.2-log) starting as process 523 ...
    160118 15:08:57 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
    /usr/sbin/mysqld: File './mysql-bin.index' not found (Errcode: 13)
    160118 15:08:57 [ERROR] Aborting
    160118 15:08:57 [Note] /usr/sbin/mysqld: Shutdown complete
    160118 15:08:57 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

    重点关注这一行:

    /usr/sbin/mysqld: File './mysql-bin.index' not found (Errcode: 13)

    解决

    可能是文件权限的问题,去查看数据库根目录的权限

    docker exec -it mysql /bin/sh
    # ls -l /var/lib/mysql
    total 0
    drwxr-xr-x 1 1000 staff 68 Jan 18 14:23 mysql

    参数详解:

    • 第一列:“drwxr-xr-x”  表示文件的类型和文件权限

    • 第二列:“1”是纯数字 ,表示文件链接个数

    • 第三列:表示文件的所有者

    • 第四列:所属的组

    • 第五列:“68”,表示为文件长度(大小)

    • 第六列:“Jan 18 14:23”,表示文件最后更新(修改)时间

    • 第七列:“mysql” 表示文件的名称

    但是,这里是挂载本地文件,于是修改挂载的本地文件夹权限

    cd /Users/xixicat/devtool/docker-mysql/5.6/data
    sudo chown -R mysql:mysql *

    仍然报错

    2016-01-18 17:26:23 988 [ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode

    于是各种尝试,都没有成功,还是先把-v参数去掉了...

    踩过的坑

                   
    参考资料:
    https://segmentfault.com/a/1190000004328677
     
     
  • 相关阅读:
    《Unity3d-控制枪口的朝向代码》
    《Unity3D-鱼的方向 鱼的游动 控制代码》
    《unity3d-随机设置一个物体的scale的方法》
    《Unity3d-在地图中随机生成一个物体的代码》
    《Unity3D-控制检测碰撞以后触发的事件之敌人的攻击行为》
    《Unity3D-播放被打中的时候粒子的特效的代码》
    《Unity3D-敌人血条或者玩家血条控制的代码》
    《Unity3D-自动寻路功能的实现》
    Unity 行首不出现中文标点
    Unity 多级下拉菜单
  • 原文地址:https://www.cnblogs.com/junneyang/p/5238333.html
Copyright © 2011-2022 走看看