Windows环境下MySQL主从配置

以下操作是在 Windows Web Server 2008 R2 操作系统下

一、环境介绍及说明

主库的版本:mysql-5.6.42-winx64.zip

主库的ip地址:127.0.0.1

主库的端口:3306

从库的版本:和主库一样

从库的ip地址:127.0.0.1

从库的端口:3307

如果有多余的服务器也可以不用都配置到一台电脑上,只需要各服务器ip能ping通就行。

注:主库和从库版本可以一致也可以不一致,需要说明一点,如果两者版本不一致,一般主库的版本需要比从库的版本低,这样就可以避免由于版本问题,有些sql不能执行的问题。

二、下载安装MySQL

MySQL官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的,这里使用zip格式的进行安装。

MySQL5.6下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads

下载完成后解压,解压后的目录:

三、配置MySQL主从

(1)主库(MySQL-Master)的安装与配置

主库根目录下有一个 my-default.ini 命名的配置文件复制一个,改名为 my.ini,用文本编辑器打开,进行配置以下基本信息:

[mysqld]

# 服务端使用的字符集默认为8比特编码的latin1字符集,设置为utf8字符

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

 

# 设置mysql的安装目录

basedir = D:\MySQL-5.6\mysql-1

# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错

datadir = D:\MySQL-5.6\mysql-1\data

# 设置3306端口

port = 3306

server_id = 1    # 主库和从库需要不一致,分别配一个唯一的ID编号

log_bin=master-bin    # 二进制文件存放路径,存放在根目录data文件夹下

 

# binlog-do-db=test   # 需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制,这里要是配置了,同时也要在Slave(也就是你的从库) 上设定。

# binlog-ignore-db=mysql    # 不需要复制的库,和上项同理

 

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

[client]

default-character-set=utf8

配置好的截图:

配置好主数据库后,复制,粘贴一个,作为从数据库

打开cmd,进入主库的bin文件夹中

输入以下安装命令:

mysqld -install MySQL-Master

注:其中的MySQL-Master为主库MySQL的服务名称

这里遇到一个如下图所示的错误提示:

解决方法:在别的Windows系统的下 C:\Windows\System32 中搜索找到 msvcp100.dll,复制到服务器相同的文件夹中即可。

出现以下提示,表示安装成功。

安装成功之后,输入以下命令启动MySQL:

net start mysql-master

注:net stop mysql-master 为停止命令

服务启动成功之后,就可以登录了,如下图所示,输入 mysql -u root -p(第一次登录没有密码,直接按回车),登录成功!

登录上之后设置root用户的密码(这里修改成123456)

执行命令

use mysql;

update user set password=password("123456") where user="root";

flush privileges;

执行完毕后如下图所示:

这样就设置好了root用户的密码了。

查看设置的字符集(my.ini配置文件里把字符集设置成了utf8,为了能正常显示中文)

show variables like "%character%";show variables like "%collation%";

(2)从库(MySQL-Slave)的安装与配置  

进入从库目录中,修改 my.ini 配置文件,具体文件内容如下,将里面的路径修改成你自己的从库路径。

安装从库服务。

打开cmd,进入从库的bin文件夹下

执行命令:mysqld -install MySQL-Slave

注:其中的MySQL-Slave为从库MySQL的服务名称

出现以下提示,表示安装成功。

启动从的mysql服务器

执行命令:net start mysql-slave

注:net stop mysql-slave为停止命令

出现以下提示信息表示从库启动成功

 

同样的,登录从库设置从库root用户的密码(这里修改成123456)

这里特别需要注意:在cmd下登录从库时需要指定设置的端口号,否则会报以下错误

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

mysql -u root -P 3307 -p(大写的P代表端口号,小写的p代表密码)

执行命令

use mysql;

update user set password=password("123456") where user="root";

flush privileges;

执行完毕后如下图所示:

至此,主、从数据库的安装及配置就完成了。

进入Windows的服务管理(进入服务管理方法,快键键Win+R打开运行框窗口,输入services.msc),即可看到主从MySQL,以及它们的状态

四、关联主库(MySQL-Master)与从库(MySQL-Slave)

上面我们已经把MySQL-Master和MySQL-Slave相关配置都已配置完成,并分别启动了,现在我们在cmd下分别登录到主库和从库中。

注意:登录主库,需要先进入到主库的bin文件夹下,再登录MySQL,然后,执行命令 show master status 查看master的状态

下图中的 File 和Position 记录下来,在从库配置中会用到 (注意:每次重启主数据库  File 和 Position 参数都会变),如下图所示:

从库,也需要先进入到从库的bin文件夹下,再登录MySQL,然后,执行命令 show slave status 查看slave的状态

我们可以发现 ,master的状态下,生成了一个二进制的日志文件,而slave下是空的,所以我们现在就要把主库与从库关联起来。只需要让从库(slave)知道主库(master)的地址就可以了。

首先我们需要在主库(master)中创建一个用户用于与从库同步的用户名和密码(这里我创建一个test用户,密码为mysql),并给test用户授权,以用于主库操作从库。

注意:是在主库中建立一个用户(专门用给从库连接的,可别迷迷糊糊的到从库的命令界面敲):

具体如下:

相关命令:

create user test;

grant replication slave on *.* to '从库用户名(test)'@'从库主机地址(127.0.0.1)'identified by '密码(mysql)';

flush privileges;   # 刷新权限 

现在我们切到从库(slave),把主库与从库联系起来。

执行以下命令:

change master to master_host='127.0.0.1',master_port=3306,master_user='test',master_password='mysql',master_log_file='master-bin.000015',master_log_pos=120;

然后执行命令 start slave 开启主从同步,如下图所示:

stop slave    # 关闭主从同步

然后执行下列命令查看 slave 的状态

show slave status \G(注意:\G后面没有分号的)

这里出现了错误,如下图所示:

这里还有uuid的概念,配置mysql主从时,由于是直接拷贝的mysql目录,导致主从mysql uuid相同, Slave_IO无法启动,所以报错,各个数据库的server_uuid得保证不一样,用以下命令分别查看主从数据库的server_uuid

show variables like '%server_uuid%';

show variables like 'server_id';    # 查看server_id

可以看到主从数据库的server_uuid是相同的

解决方法:

找到data文件夹下的auto.cnf文件,修改里面的uuid值,保证各个数据库的uuid不一样,修改后重启数据库即可

再依次执行以下命令:

stop slave     # 关闭主从同步

start slave    # 开启主从同步

show slave status \G(注意:\G后面没有分号的)    # 查看 slave 的状态

出现如下图所示,则开启主从跟踪成功

至此,主从跟踪已经开启,并全部配置完成

五、验证主从同步

分别进入主库和从库并查看它们的数据库,然后在主库中创建一个数据库web,看一下从库有没有变化,如下图所示:

 

至此,主从同步已配置完毕。

说明:注意不要往从库中写数据,如果从库写入数据,master_log_pos是不会变化的,主库的信息没有发生变化,当主库又变化和从库一样的操作时就有可能会产生冲突,因此,只能在主库中写数据,从库只能读数据,当然主库也可以读数据。

还有一点,如果想同步主库里在之前就有的数据库的数据,需要手动从主库中导出数据库,然后在从库里再导入,就能同步了。

六、其他一些相关命令

查看binlog日志里面的内容

列表:show master logs

清空:reset master

刷新:flush logs

查看指定日志:show binlog events in '日志键名'

 

本文参考自其他博客:

(1)https://www.cnblogs.com/naruto123/p/8138708.html

(2)https://www.cnblogs.com/jpfss/p/8143720.html

 

posted @ 2019-05-22 10:30  OpsDrip  阅读(3007)  评论(0编辑  收藏  举报