windows中MySQL主从配置【第一篇】

前言:
        windows系统配置MySQL主从复制,系统中需要安装两个MySQL服务。我本地用的是集成环境,集成环境已经有一个MySQL服务,那么就需要自己在单独下载安装一个MySQL服务。本篇文章就是教如何下载、安装MySQL,最后是如何主从配置的。

我本地用的集成环境是phpstudy,MySQL版本是5.7.26

 

第一部分:windows如何安装两个MySQL服务

第一步:由于集成环境在windows中只能启动一个MySQL服务,所以我们需要下载一个MySQL的安装包,自行安装一个非集成环境中的MySQL服务。

下载地址如下:在里面选择自己所需要的版本即可。

MySQL :: Developer Zonehttps://dev.mysql.com/

下载完成,解压之后得到如下图一个文件夹目录。

进入到  D:\mysql-5.7.39-winx64\bin 该目录下双击:mysql.exe,如下图所示

双击:mysql.exe 之后,发现闪出一个黑色的弹窗,并无其他的反应。
导致的原因:因为服务没有安装,如何安装,接着往下看。

第二步、修改自行安装的MySQL配置文件

        理论上到现在这一步直接安装服务即可,但是因为是默认配置,我们使用的时候会出现很多问题。比如里面的汉字是乱码,等一系列不确定因素,建议先配置一下默认文件。在D:\mysql-5.7.39winx64(根目录下),新建个my.ini。复制下面的代码保存就ok了。

[mysql]
default-character-set=utf8

[mysqld]
port = 3307
basedir=D:\mysql5.7.39winx64
datadir=D:\mysql5.7.39winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=InnoDB

[client]
port=3307
default-character-set=utf8

注意:新建的 my.ini 文件一定要注意格式,要保存成 ANSI 格式 。

 以管理员身份运行cmd.exe程序

1、将路径切换到:D:\>cd mysql5.7.39winx64\bin

2、执行:mysqld.exe install 命令

执行安装命令以后,会看到安装成功提示,如下图所示:

3、初始化数据库,执行命令: mysqld --initialize --console 执行结束如下图所示

 注意:最后一行是数据库的初始密码
yE/WzCr1Qdz2 就是初始密码,后续登录需要使用,后面也可以在登陆后修改密码。

执行完 mysqld --initialize --console 命令,会在开始手动创建的 data 目录下生成一些文件,如下图所示

 4、执行安装服务命令 mysqld install MySQL3

注意:这里需要指定一下服务名称,如不指定服务名称,则默认是MySQL,但是MySQL 是本地安装的集成环境中服务名称,故我将服务名称改成了 MySQL3

执行命令完成,查看电脑的服务,则发现多了一个MySQL3的服务

 服务至此已安装成功,但先不要急着启动MySQL3的服务,还需修改注册表。

 

第三步:修改MySQL3服务的注册表

1、运行(快捷键win+R)——输入:regedit.exe 以管理员身份运行。
2、找到MySQL3服务,路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 就能看到MySQL3

 第四步:再次启动MySQL3服务,如下图所示,启动成功。

第五步:登录MySQL3

 

注意:
1、密码是开始安装服务给的初始密码: yE/WzCr1Qdz2

2、登陆命令中要指定服务端口号,否则将登陆失败

 第六步:修改MySQL3的密码

ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

 

出现 Query Ok,代表修改密码成功。

到此,windows7安装两个MySQL服务已经完成。其他windows系统安装两个MySQL服务的过程,可以参考windows7的安装教程,大同小异。其中有所不同的应该是,环境变量配置、执行系统命令的区别。

第二部分:如何配置MySQL主从

主库配置:

第一步:修改主库my.ini文件中的配置

[mysql]
default-character-set=utf8

[mysqld]
port=3306
basedir=D:/PhpStudyV8/phpstudy_pro/Extensions/MySQL5.7.26/
datadir=D:/PhpStudyV8/phpstudy_pro/Extensions/MySQL5.7.26/data/
character-set-server=utf8
default-storage-engine=MyIsam
max_connections=1000
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
innodb_buffer_pool_size=64M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=120
innodb_log_buffer_size=4M
innodb_log_file_size=256M
interactive_timeout=120
join_buffer_size=2M
key_buffer_size=32M
log-error="D:/PhpStudyV8/phpstudy_pro/Extensions/MySQL5.7.26/data"
log_error_verbosity=1
max_allowed_packet=16M
max_heap_table_size=64M
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=32M
read_buffer_size=512kb
read_rnd_buffer_size=4M
skip-external-locking=on
sort_buffer_size=256kb
table_open_cache=256
thread_cache_size=16
tmp_table_size=64M
wait_timeout=120
binlog_format=mixed
#server_id=1
server-id=1
log-bin=mysql-bin
#binlog记录内容的方式,记录被操作的每一行
binlog_format=ROW
#减少记录日志的内容,只记录受影响的列
binlog_row_image=minimal
#指定需要复制的数据库名为db_test,如果备份多个数据库,重复设置这个选项即可
binlog-do-db=db_test
#不需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
# 这个参数要加上,否则不会给更新的记录些到二进制文件里(未测试)
log-slave-updates=1

[client]
port=3306
default-character-set=utf8

重点部分是:

#server_id=1
server-id=1
log-bin=mysql-bin
#binlog记录内容的方式,记录被操作的每一行
binlog_format=ROW
#减少记录日志的内容,只记录受影响的列
binlog_row_image=minimal
#指定需要复制的数据库名为db_test,如果备份多个数据库,重复设置这个选项即可
binlog-do-db=db_test
#不需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
# 这个参数要加上,否则不会给更新的记录些到二进制文件里(未测试)
log-slave-updates=1

第二步:创建提供给从库,用来同步数据的账号

#创建允许从库同步数据的账号
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by '123456';
#刷新权限
FLUSH PRIVILEGES;

第三步:重启MySQL服务,并查看主库的状态

                         修改完配置以后,需要重新启动MySQL服务,如下图所示

 登录MySQL,查看主库记录二进制的文件名和位置,如下图所示

文件名:mysql-bin.000005  位置:154

 从库配置:

第一步:修改从库的my.ini配置文件

[mysql]
default-character-set=utf8

[mysqld]
port = 3307
basedir=D:\mysql5.7.39winx64
datadir=D:\mysql5.7.39winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=InnoDB
#服务的唯一编号
server-id=2
#开启mysql binlog功能
log-bin=mysql-bin
#binlog记录内容的方式,记录被操作的每一行
binlog_format=ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal

replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=performance_schema.%
replicate_wild_ignore_table=information_schema.%

[client]
port=3307
default-character-set=utf8

 配置的重点是:

#服务的唯一编号
server-id=2
#开启mysql binlog功能
log-bin=mysql-bin
#binlog记录内容的方式,记录被操作的每一行
binlog_format=ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal

replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=performance_schema.%
replicate_wild_ignore_table=information_schema.%

涉及到的常用配置说明:replicate_wild_ignore_table

使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错。

在Slave上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 来解决跨库更新的问题。

第二步:重启MySQL3服务。 

 

重启MySQL3服务,并登录。登录时需要注意指定端口号 3307(具体原因第一部分安装MySQL服务时有说明)。

第三步:在从库中配置主库的信息 ,执行如下命令

CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='root',MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=154;
命令中参数说明:
MASTER_HOST 是主库的ip
MASTER_PORT 是主库mysql的端口
MASTER_USER 是用户名
MASTER_PASSWORD 是主库mysql的密码
MASTER_LOG_FILE 是主库的二进制文件
MASTER_LOG_POS  是主库的位置

执行结果如下图所示,代表成功。

启动 slave 同步进程

mysql> start slave;

查看 slave 状态

mysql> show slave status \G;

 

 Slave_IO_Running: Yes,Slave_SQL_Running: Yes时说明两个线程已启动,主从复制配置成功。

在主库创建新表,看从库是否将新表同步了。
可能出现的问题如下:
1、从库未能同步主库数据
    可以通过show slave status\G;检查Slave_IO_Running和Slave_SQL_Running的状态是否都为Yes。
如果Slave_IO_Running的状态为Connecting,一般是从库数据被修改导致的Position失效导致的(当然原因也可能是因为网络不通、密码不对):
2、程序也可能在slave上进行了写操作
3、可能是slave机器重启后,事务回滚造成的.
所以不要手动修改从表数据,否则数据冲突会导致主从同步失败(超过了一定的重试次数,从库不再进行同步)

实际过程中遇到的问题

在slave服务器上通过如下命令

mysql> show slave STATUS \G;

提示:

 

Slave_SQL_Running: No 表示slave不同步

 第一种解决方法:

1、先停止从库的运行
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
2、跳过错误步数,后面步数可变
mysql> set global sql_slave_skip_counter=1;
3、再启动slave
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
4、查看同步状态
mysql> show slave STATUS \G;
显示如下信息则表示正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

第二种解决方法(重新做主从,完全同步):

1、先进入主库进行锁表,注意窗口不要关闭
mysql> flush table with read lock;
2、把数据进行备份
> mysqldump -uroot -p --opt -R 数据库 > /data/bak.sql
3、再新开个窗口,查看主数据库信息
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 |   1158 |       |         |          |
+------------------+----------+--------------+------------------+-------------------+
4、在从库上停止slave
mysql> stop slave;
5、导入备份的数据文件
mysql> source /data/bak.sql
6、重置同步
mysql> reset slave;
7、重新设置同步节点
CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='root',MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=154;
8、开启slave
mysql> start slave;
9、查看slave状态
mysql> show slave status\G;
显示如下信息则表示正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
10、对主数据库解锁
mysql> unlock tables;

第三部分:测试主从同步

在主库的db_test中,新建一张user_infos表,刷新从库db_test库,会发现从库也出现了一张user_infos表。

MySQL主从配置-GTID模式
MySQL主从配置-之GTID复制【第二篇】_Super乐的博客-CSDN博客MySQL主从配置之GTID复制https://blog.csdn.net/wplblog/article/details/126975106?spm=1001.2014.3001.5502

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值