美文网首页
Docker 安装 mysql

Docker 安装 mysql

作者: 俊果果 | 来源:发表于2019-09-28 14:51 被阅读0次

    一、直接安装mysql

    参见文章CentOS 安装 mysql


    下面介绍使用docker安装mysql

    二、 docker

    1、安装docker

    • 安装前置的工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 添加软件源信息:
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 更新 yum 缓存:
    sudo yum makecache fast
    
    • 安装 Docker-ce:
    sudo yum -y install docker-ce
    
    • 启动 Docker 后台服务
    sudo systemctl start docker
    

    2、配置网络镜像加速

    • 新建配置文件
    vi /etc/docker/daemon.json
    
    • 添加内容并保存
    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
    

    3、配置docker开机自启

    systemctl  enable docker.service
    

    三、 安装 mysql

    1、 拉取最新版镜像

    docker pull mysql
    

    2、新建目录,用作mysql的存储映射

    mkdir /var/lib/mysql
    

    3、 创建并启动容器

    docker run \
    --name mysql \
    -p 3306:3306 \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD=root \
    -v /var/lib/mysql/data:/var/lib/mysql/ \
    -d mysql \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci
    

    参数说明:

    • -p: 映射本地端口3306
    • --restart-always: docker服务启动时,自动启动容器,并且当容器停止时,尝试重启容器
    • -e MYSQL_ROOT_PASSWORD:设置root初始化密码为root,第一次设置才有小,后面重启以修改的密码为准
    • -v : 将本地目录和docker虚拟机内的目录做映射
    • -d: 后台运行容器,并返回容器ID
    • mysql8.0安装默认编码为utf8mb4,所以可以不需要参数--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

    执行后可以看到返回了容器id


    image.png

    4、查看运行情况

    • docker ps


      image.png
    • 复制文件
    docker cp mysql:/var/lib/mysql ./
    
    • 查看运行日志
    docker logs --tail 50 --follow --timestamps mysql
    
    image.png
    • 进入容器
     docker exec -it mysql /bin/bash
    
    • 登录mysql
    mysql -u root -p
    
    • 查看 mysql 时区
    select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00')); 
    或
    SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP); 
    或
     show variables like '%time_zone%';
    --查看系统当前时间
    select now();
    
    image.png
    image.png
    图示表示使用的是 UTC 时区,当前本机时间为 9 点,服务器中为 1点,差了八个小时


    后续就是常规的 mysql 初始化操作,此处不赘述

    • 例如,新增用户并启用远程连接
    CREATE USER 'mysqluser'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
    GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%';
    

    四、 配置一个简单的主从示例

    1、按照上述方法配置一个新的虚拟机和mysql docker

    2、主mysql设置

    • 拷贝一份MySQL配置文件
    docker cp mysql:/etc/mysql/my.cnf ./my.cnf
    
    • 编辑文件内容
      在 [mysqld] 节点最后加上后保存
    log-bin=mysql-bin
    server-id=1
    

    server-id=1 唯一服务器ID,非0整数,不能和其他服务器的server-id重复

    • 将修改后的文件覆盖docker中mysql中的配置文件
    docker cp ./my.cnf mysql:/etc/mysql/my.cnf
    
    • 重启 mysql 的docker , 让配置生效
     docker restart mysql
    
    • 创建备份用户
    CREATE USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY 'backup';
    grant replication slave on *.* to 'backup'@'%' ;
    show grants for 'backup'@'%';
    
    image.png

    3、从mysql设置

    • 按照上述方法,修改配置文件
      内容如下
    log-bin=mysql-bin
    server-id=2
    

    4、从库配置

    运行SQL语句

    CHANGE MASTER TO 
    MASTER_HOST='ip',
    MASTER_PORT=3306,
    MASTER_USER='backup',
    MASTER_PASSWORD='backup';
    
    START SLAVE;
    

    可看到如下结果:


    image.png
    • 若报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work
      进入从库data目录,修改auto.cnf
    vi /var/lib/mysql/data/auto.cnf
    

    将其中的uuid改为与主库不同即可

    5、测试

    主库中表新增记录,再去从库查询,会发现记录已经自动同步了过去
    Ok!

    相关文章

      网友评论

          本文标题:Docker 安装 mysql

          本文链接:https://www.haomeiwen.com/subject/vezzuctx.html