windows server 2012 MySql 主从架构实现
一主一从
-
环境准备
windows server 服务器一台(最好是准备两台),mysql 8.0.16 安装包(mysql-8.0.16-winx64.zip),配置好windows 环境,如果主从节点不在同一台服务器,注意防火墙、各个节点的时钟服务同步、各节点之间可以通过主机名相互通讯。
-
准备步骤
-
安装mysql, master 节点,解压安装包到指定目录:D:\soft\mysql-8.0.16-winx64,我是解压到这里,解压之后是缺少data目录和my.ini 配置文件的,所以我们自行创建。还要将解压后的 bin 路径添加到
环境变量 path
里面
创建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 复制代码
-
安装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 '新密码'; 复制代码
安装mysql 就完成了。其他从节点安装,请参考以上步骤。
-
-
实现步骤
-
架构图
-
配置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
,查看主服务器二进制日志状态及位置号。后面,同步时会用到。
-
-
配置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:
slave:
在master 服务器中 test库中创建一个表“t_user”,看从服务器中是否有这张表:
从服务器上也有这张表:t_user
说明主从同步成功了!
-