zoukankan      html  css  js  c++  java
  • mysql的主从配置(docker-conetos7)

    安装docker

    也可以参照菜鸟的教程。

    yum install docker -y

    启动docker并设置开启开机启动

    systemctl start docker
    systemctl enable docker

    查看mysql的容器 并选择下载

    docker search mysql
    //下载
    docker pull mysql:5.7

    一般说明,到这里可能你有疑问,我安装了mysql容器,可以在里面把配置文件修改了就不好了吗?这样当然可以。但是考虑到容器原本就封装好了环境,进到容器里面修改可能需要安装很多插件等,不仅要等很久才能下载完还可能对环境进行了污染。所以一般考虑与宿主机的配置文件的方式。

    在宿主机上创建目录结构

    mkdir -p /usr/local/docker/mysql/conf
    mkdir -p /usr/local/docker/mysql/data

    运行容器

    docker run --name mysql -p 3306:3306 -v /usr/local/docker/mysql/data:/var/lib/mysql -v /usr/local/docker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

    参数说明一下

    • -i:表示运行容器
    • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    • --name :为创建的容器命名。
    • -v:表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
    • -e: 设置环境变量,这里是指定root账号密码

    设置环境变量,更多设置请参考 my.cnf

    --server-id=1 服务器id

    --log-bin=mysql-bin 日志文件前缀

    #--replicate-do-db 可以指定同步哪个数据库,多个用逗号分隔

    如--replicate-do-db=mydb1,mydb2

    拷贝默认配置文件进行修改

    容器内路径 /etc/mysql/mysql.conf.d/mysqld.cnf

    docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config

    修改本地上配置文件

     本地路径 /usr/local/docker/mysql/config/mysqld.cnf

    在[mysqld] 节点添加
    character-set-server=utf8
    #服务器id 同一局域网不要重复, 可以用ip后一位
    server-id=1
    #二进制日志开启, 指定文件前缀
    log-bin=mysql-bin
    #需要同步的数据库
    replicate-do-db=mydb1,mydb2
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

    编辑配置文件 vim  /usr/local/docker/mysql/config/mysqld.cnf

    修改完按esc 输入 : 接着wq! 保存退出。

    重启容器

    docker restart mysql

    设置容器开机自动启动(也可以在创建容器时 设置环境变量(--restart=always)

    docker update --restart=always mysql

     配置完配置文件,实际开发种不可能使用root用户操作数据库。所有需要添加新的用户和授权。

    创建用户和授权

    #进入容器:
    docker exec -it mysql bash
    #进入mysql:
    mysql -uroot -p
    #授权root用户可以远程访问
    mysql> GRANT ALL ON *.* TO 'root'@'%';
    #下面是创建两个用户user1,user2并且赋予权限,这里根据你的需要创建用户和授权
    CREATE USER 'user1'@'localhost' IDENTIFIED BY '密码';
    GRANT ALL PRIVILEGES ON *.* TO ' user1'@'ip地址' WITH GRANT OPTION;
    CREATE USER ' user2'@'%' IDENTIFIED BY '密码2';
    GRANT ALL PRIVILEGES ON *.* TO ' user2'@'%' WITH GRANT OPTION;
    #创建连接账号(指定从库ip) 多个可以创建多个
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '你想给那个用户连'@'从库ip';
    #如果你想省事就直接授权给root用户
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'从库ip';

    刷新权限

    mysql> flush privileges;

    更新root用户密码(如果你不想修改密码省略)

    mysql> UPDATE user SET authentication_string=password('新密码') WHERE user='root';

    刷新权限

    mysql> flush privileges;

    主从配置

    到上面的步骤主数据库完成了配置,但是从库需要一些参数来连接到主库来达到主从的配置

    #查看marster 状态 记住File,Position  从库连接必要参数

    #查看marster 状态 记住File,Position  从库连接必要参数
    show master status;

     

     这两个参数,等下从库连的时候要用,这时候不用动主库了,修改主库的时候这两个参数会变动。

    配置从库

     配置文件

    在[mysqld] 节点添加
    character-set-server=utf8
    #服务器id 同一局域网不要重复, 可以用ip后一位
    server-id=2
    
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

     设置好了,重启从库容器mysql

    docker restart mysql

     设置容器开机自动启动(也可以在创建容器时 设置环境变量(--restart=always)

    docker update --restart=always mysql

    设置好了,就在从表的客户端或者进入从表的mysql容器执行

    #停止同步
    stop slave;
    #更改同步参数 master_log_file  ,  master_log_pos  在主库获取执行下面的命令
    change master to master_host=’ 主库ip’,master_user=’用户’,master_password=’密码’,master_log_file=’mysql-bin.000004’,master_log_pos=770
    执行完成功后开始同步
    start slave;
    #刷新同步(马上生效)
    
    flush privileges;

    #在从库查看同步状态

    show slave status;

    如果 Slave_IO_Running , Slave_SQL_Running   都是Yes 表示同步成功

    到这里就完结了。测试一下创建mydb1库,创建一张表加数据看看吧。

    总结:

    配置主从数据库步骤:

    安装两个mysql(容器),修改配置文件,在配置文件种设置不同的server-id,主库开启二进制日志功能,这个是给从库可以随便读取日志从而刷新从库的(关键)。

    重启mysql让配置生效,这里是从前容器 docker restart mysql;

    配置用户和授权 ,并刷新

    CREATE USER '用户'@'ip/不限ip使用%代替' IDENTIFIED BY '密码';

    GRANT ALL PRIVILEGES ON *.* TO '用户'@'ip地址[%]' WITH GRANT OPTION

    flush privileges;

    在从库中操作,更改同步参数 master_log_file  ,  master_log_pos  在主库获取执行命令

    change master to master_host=’ 主库ip’,master_user=’用户’,master_password=’root’,master_log_file=’上面查到的参数’,master_log_pos=查到的参数

    犯错总结

    在docker创建mysql容器创建了几个没有杀掉其它导致配置文件不生效和一些莫名的错;使用docker ps -a 查看所有的docker容器,使用docker rm -f 名称删除不需要的容器。

    在修改mysql的配置文件的时候使用的使用的是容器的/etc/mysql/mysql.conf.d/mysqld.cnf配置文件,以前是不是你修改的是my.ini?这里是不是有疑问呢?

  • 相关阅读:
    从Kratos设计看Go微服务工程实践
    京东到家安全测试实践
    浅谈 Protobuf 编码 原创 gsonli 腾讯技术工程 2021-07-14
    API Design Guide
    The power of two choices in randomized load balancing
    NGINX and the "Power of Two Choices" Load-Balancing Algorithm
    SRE 崩溃
    DDoS木马
    String.fromCharCode(88,83,83) 方法返回由指定的 UTF-16 代码单元序列创建的字符串
    汇编语言的AX,BX,CX,DX,分别表示什么
  • 原文地址:https://www.cnblogs.com/fengyangcai/p/14142049.html
Copyright © 2011-2022 走看看