搭建本地和容器版MySQL主从集群


【首先】关闭防火墙:

[root@s1 master]# setenforce 0
[root@s1 master]# systemctl stop firewalld; iptables –F

1. 搭建本地mysql主从集群

  • 安装mysql,分别在master节点和node1和node2节点操作。

    [root@s1 mysql]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
    

    在这里插入图片描述

  • 创建mysql系统用户和组。

    [root@s1 mysql]# groupadd mysql
    [root@s1 mysql]# useradd -r -g mysql mysql 
    [root@s1 mysql]# passwd mysql 
    Changing password for user mysql.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
  • 解压和迁移mysql安装包至/usr/local

    [root@s1 mysql]# mv mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz /usr/local/
    [root@s1 mysql]# cd /usr/local/
    [root@s1 local]# ls
    bin  etc  games  include  lib  lib64  libexec  mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz  sbin  share  src
    [root@s1 local]# tar xvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
    

    在这里插入图片描述

    [root@s1 local]# tar zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
    

    在这里插入图片描述
    移除mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

    在这里插入图片描述

  • 修改mysql-5.7.22-linux-glibc2.12-x86_64为mysql,并在mysql/support-files下创建my.cnf配置文件,修改文件内容,将其复制到/etc/my.cnf,复制mysql.server至/etc/init.d/mysql。

    [root@s1 local]# mv mysql-5.7.22-linux-glibc2.12-x86_64/ mysql
    [root@s1 local]# cd ./mysql/support-files/
    [root@s1 support-files]# vi my.cnf
    

    在这里插入图片描述

    [root@s1 support-files]# cp my.cnf /etc/my.cnf
    cp: overwrite ‘/etc/my.cnf’? y
    [root@s1 support-files]# cp mysql.server /etc/init.d/mysql
    
  • 配置参数并初始化

    [root@s1 mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    

    在这里插入图片描述
    记住最后一行的临时密码bbTBKTdoL4!K。
    指定数据位置:
    在这里插入图片描述

    [root@s1 mysql]# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
    
  • 启动mysql,并修改密码为123456,输入的密码即为之前的临时密码,查看user数据。

    [root@s1 bin]# ./mysql -uroot -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.22-log
    Copyright (c) 2000, 2018, 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> set password=password('123456');
    Query OK, 0 rows affected, 1 warning (0.01 sec)
    mysql> use mysql
    Database changed
    mysql> select host,user from user;
    +-----------+---------------+
    | host      | user              |
    +-----------+---------------+
    | localhost  | mysql.session      |
    | localhost  | mysql.sys          |
    | localhost  | root              |
    +-----------+---------------+
    3 rows in set (0.00 sec)
    mysql> exit
    Bye	
    
  • 配置mysql自动启动

    # chmod 755 /etc/init.d/mysql
    # chkconfig --add mysql
    # chkconfig --level 345 mysql on
    

    启动mysql:service mysql start。

    至此,mysql安装基本完成。

  • 配置主从同步数据库。

    系统: centOS 7
    Master:192.168.5.101(主) node1:192.168.5.102(从) node2:192.168.5.103(从)
    (1)配置主数据库,修改master的mysql配置文件my.cnf,在mysqlId下添加以下字段。

    #保证唯一
    server_id=1          
    # 开启二进制日志
    log-bin=mysql-bin
    

    (2)给从服务器创建访问用户slave,密码为123456,并刷新权限。

    mysql> grant replication slave on *.* to 'slave'@'%' identified by '123456';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    	mysql>  flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    显示用户:
    mysql> use mysql;
    Database changed
    mysql> select host,user from user;
    +---------------+---------------+
    | host            | user            |
    +---------------+---------------+
    | %               | slave           |
    | localhost        | mysql.session    |
    | localhost        | mysql.sys        |
    | localhost        | root            |
    +---------------+---------------+
    7 rows in set (0.00 sec)
    

    (3)重启mysql服务

    service mysql restart
    

    (4)配置从服务器,node1的server-id为2,node2的server-id为3。
    登录mysql执行以下步骤:

    mysql> CHANGE MASTER TO
        -> Master_Host='192.168.5.101',    #master主机IP
        -> Master_User='slave',            #创建的user用户
        -> Master_Password='123456',
        -> Master_Port=3306;
    Query OK, 0 rows affected, 2 warnings (0.12 sec)
    

    查看slave状态:mysql>show slave status\G
    重点看slave_io_running和 slave_sql_runnin两项都为yes
    (5)在master处创建新的数据库db1,在node1和node2处查看是否同步。
    主数据库:
    在这里插入图片描述
    从数据库:
    在这里插入图片描述
    本地mysql主从数据库搭建完成。

2. 使用docker搭建mysql主从集群

  • 使用docker将mysql:5.7.22下载到本地。

    pull mysql到本地,命令如下:docker pull mysql:5.7.22

  • 在主机下面新增master.cnf和slave.cnf配置文件

    主要字段为:log-bin = mysql-bin server-id = 1(server-id = 2)

  • 运行容器

    启动master容器:

        [root@s1 ~]# docker run -p 3306:3306 --name master -v /root/master.cnf:/etc/mysql/conf.d /master.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.22
        fe5dd2ab42ee4d27958f6dfc0b6db77d12011902c6d26e16b6f08e4efac53316
    

    启动slave容器:

    [root@s1 ~]# docker run -p 3307:3306 --name slave -v /root/slave.cnf:/etc/mysql /conf.d/slave.cnf -e MYSQL_ROOT_PASSWORD=123456-d mysql:5.7.22
    Initializing database
    2019-03-20T08:53:58.237323Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode.
    ……
    

    查看运行中的容器
    在这里插入图片描述

  • 进入容器中,命令如下:

    进入到slave容器中:[root@s1 ~]# docker exec -i -t 84cda6591a7e /bin/bash
    进入到master容器中:[root@s1 ~]# docker exec -i -t fe5dd2ab42ee /bin/bash

  • 进入master的mysql,查看数据库状态。
    在这里插入图片描述
    在这里插入图片描述
    创建用户slave1并赋予权限,密码为123456。

    mysql> GRANT ALL PRIVILEGES ON *.* TO slave1@'%' IDENTIFIED BY 123456; FLUSH PRIVILEGES;
    

    在这里插入图片描述

  • 进入slave数据库中配置主从关系关联:

    mysql> change master to
        -> master_host='192.168.5.101',
        -> master_port=3306,
        -> master_user='slave1',
        -> master_password='123456';
    Query OK, 0 rows affected, 2 warnings (0.03 sec)
    

    并查看同步状态:
    在这里插入图片描述
    可以看到Slave_IO_Running和Slave_SQL_Running选项都为yes。

  • 测试是否搭建成功:

    Master创建db1数据库,查看slave节点是否同步。
    在这里插入图片描述
    搭建成功。


3. 注意

  • 不同步原因,master_host需要使用master节点的IP,master_user使用赋予权限的user名。
  • 配置文件server-id不能相同
  • 配置文件的同步数据库不用指定,可以不加指定库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值