windows server 2012 MySql 主从架构实现

windows server 2012 MySql 主从架构实现

一主一从

  1. 环境准备

    windows server 服务器一台(最好是准备两台),mysql 8.0.16 安装包(mysql-8.0.16-winx64.zip),配置好windows 环境,如果主从节点不在同一台服务器,注意防火墙、各个节点的时钟服务同步、各节点之间可以通过主机名相互通讯。

  2. 准备步骤
    1. 安装mysql, master 节点,解压安装包到指定目录:D:\soft\mysql-8.0.16-winx64,我是解压到这里,解压之后是缺少data目录和my.ini 配置文件的,所以我们自行创建。还要将解压后的 bin 路径添加到环境变量 path 里面

      image-20210615145842592.png
      创建master 主节点 my.ini 文件,写入基本配置:

      [mysqld]
      # 设置3306端口
      port=3306
      # 设置mysql的安装目录
      # 根据自己的地址更改
      basedir=D:\\soft\\mysql-8.0.16-winx64
      # 设置mysql数据库的数据的存放目录
      # 根据自己的地址更改
      datadir=D:\\soft\\mysql-8.0.16-winx64\\data
      # 允许最大连接数
      max_connections=2000
      # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
      max_connect_errors=10
      # 服务端使用的字符集默认为UTF8
      character-set-server=UTF8MB4
      # 创建新表时将使用的默认存储引擎
      default-storage-engine=INNODB
      # 默认使用“mysql_native_password”插件认证
      default_authentication_plugin=mysql_native_password
      
      [mysql]
      # 设置mysql客户端默认字符集
      default-character-set=UTF8MB4
      
      [client]
      # 设置mysql客户端连接服务端时默认使用的端口
      port=3306
      default-character-set=utf8
      复制代码
    2. 安装mysql

      在mysql的安装目录:D:\soft\mysql-8.0.16-winx64\bin下,以管理员身份运行cmd,执行下面的命令:

      mysqld --defaults-file=D:\soft\mysql-8.0.16-winx64\my.ini --initialize --console
      复制代码

      执行完成后,会打印 root 用户的初始默认密码,复制并保存它。

      再行下面的命令安装mysql服务:

      mysqld --install 服务名 --defaults-file=D:\soft\mysql-8.0.16-winx64\my.ini
      复制代码

      安装成功后,使用命令 :net start 服务名,启动mysql 服务,使用之前root 账号的默认密码,登录mysql ,修改密码。

      修改密码的sql:

      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
      复制代码

      uTools_1623742626184.png

      安装mysql 就完成了。其他从节点安装,请参考以上步骤。

  3. 实现步骤
    • 架构图

      • image-20210615153900561.png
    • 配置master主服务器

      • 找到mysql 安装目录中的 my.ini 文件,进行一些配置,报过二进制日志文件,唯一server-id的指定。如:

        [mysqld]
        .....
        #### 主从配置 ####
        server-id=1
        #打开Mysql日志,日志格式为二进制
        log-bin=master-bin
        #每次执行写入就与硬盘同步, 根据业务需求进行相应调整
        sync-binlog=1
        #需要同步的二进制数据库名
        binlog-do-db=xxxx
        #只保留7天的二进制日志,以防磁盘被日志占满,根据业务需求进行相应调整
        expire-logs-days=7
        #不备份的数据库
        binlog-ignore-db=information_schema
        binlog-ignore-db=performation_schema
        binlog-ignore-db=sys
        binlog-ignore-db=mysql
        
        #mysql复制主要有三种方式:
        # 根据业务需求进行相应调整
        binlog_format=ROW
        复制代码

        修改完后,重启mysqL 服务。

    • 创建复制账号

      • 在master 节点上创建一个专门的主从同步的账号,每个 slave 使用标准的 MySQL 用户名和密码连接 master 。进行复制操作的用户会授予 REPLICATION SLAVE 权限。

        # 创建账户
        CREATE USER `m-slave`@`%` IDENTIFIED WITH mysql_native_password BY '密码' PASSWORD EXPIRE NEVER;
        # 授权
        GRANT Replication Client, Replication Slave ON *.* TO `m-slave`@`%`;
        复制代码
    • 查看master状态

      • 在 Master 的数据库执行 show master status,查看主服务器二进制日志状态及位置号。

        image-20210615155643785.png

        后面,同步时会用到。

    • 配置slave从服务器

      • 找到从节点的mysql 安装目录的my.ini 文件,打开中继日志,指定唯一的 servr ID,设置只读权限。在配置文件加入如下值:

        #### 主从配置 #####
        # 配置server-id,让从服务器有唯一ID号
        server-id=2
        # 打开Mysql中继日志,日志格式为二进制
        relay_log=mysql-relay-bin
        # 设置只读权限
        read_only=1
        # 开启从服务器二进制日志
        log_bin=slave-bin
        # 使得更新的数据写进二进制日志中
        log_slave_updates=1
        
        # 需要同步的库,库名称相同
        #replicate-do-db=xxx
        #replicate-do-db=shop_ds_master
        
        #如果需要同步的数据库名不同
        # master 上的数据库名为 shop_ds_master , slave 上的库名为 shop_ds_slave
        replicate-rewrite-db=test->test
        
        
        #跳过所有的错误错误,继续执行复制操作,适合大数据量同步
        #slave-skip-errors=all
        
        #不同步mysql系统数据库
        replicate-ignore-db=mysql
        复制代码

        修改完,记得重启mysql 服务。

    • 启动从服务器复制线程

      • MariaDB [(none)]> change master to master_host='192.168.37.111', // 主节点的ip
           >master_user='slave',  // 同步账户
           >master_password='keer',  // 密码
           >master_port='3306',  // 端口
           >master_log_file='master-bin.000001',  // master对应的bin-log文件
           >master_log_pos=1496; // 同步位置号
        复制代码
      • 启动复制线程:

        > start slave;
        复制代码
    • 查看从服务器状态

      • 可使用SHOW SLAVE STATUS\G;查看从服务器状态,如下所示,也可用show processlist \G;查看当前复制状态:

      •     Slave_IO_Running: Yes		//IO线程正常运行
        	Slave_SQL_Running: Yes		//SQL线程正常运行
        复制代码

    • 测试

      主从同步测试:

      ​ 我们在 master 服务器上创建一个数据库,再使用该数据库创建一个表,添加一条记录,来看一看 slave 服务器有没有同步成功。
        首先,我们先来查看一下两个服务器上有什么数据库:

      ​ master:

      image-20210615162140974.png

      slave:

      image-20210615162150425.png

      在master 服务器中 test库中创建一个表“t_user”,看从服务器中是否有这张表:

      image-20210615162721592.png

      从服务器上也有这张表:t_user

      image-20210615162844470.png

      说明主从同步成功了!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享