平常来说,MySQL数据库的主库和从库是散布在差别的主机上。假如,如今我们只需一台主机,且是windows体系,怎样完成MySQL的主从复制呢?要领以下:
这里我们只引见 一主一从 的操纵要领。
我的电脑已装置了 xampp 集成环境(同wamp装置包相似),能够把它内里的MySQL效劳作为MySQL的主效劳器。那末,我们还需要在这台电脑上再装置一个MySQL,作为数据库的从效劳器。
我的电脑xampp中已装置的MySQL版本为 5.6.20,端口为3306。
我们需要再装置一个MySQL(最好装置同版本和邻近版本的,以避免出现问题),端口改成3307
数据库效劳器的参数:
主效劳器(master): IP为127.0.0.1,端口为3306
从效劳器(slave): IP为127.0.0.1,端口为3307
主效劳器设置:
修正主效劳器的数据库设置文件(E:\xampp\mysql\bin\my.ini),在 [mysqld] 标签的最下面,增加以下代码:
#需要备份的数据库
binlog-do-db=test
#不需要备份的数据库
binlog-ignore-db=mysql
#开启二进制日记
log-bin=mysql-bin
#效劳器id
server-id=1
保留退出,重启MySQL主效劳器。
binlog-do-db用于指定需要同步的数据库,binlog-ignore-db指定不需要同步的数据库,假如这两个参数都不设置,则从效劳器会复制主效劳器的一切数据库。
平常不必root账号作同步账号,为此,我们需要在主效劳器上建立一个新的用户(如 user01,暗码为123456)。
这里我们用敕令行的体式格局建立,要领以下:
翻开cmd,切换至 E:\xampp\mysql\bin,用 root 账户衔接MySQL主效劳器:
mysql -uroot -p -P3306
建立新用户:
create user 'user01'@'127.0.0.1' identified by '123456';
(@背面的ip地点为许可衔接的客户端的ip地点。)
然后,给新用户设置主从复制的权限:
grant replication slave on *.* to 'user01'@'127.0.0.1' identified by '123456';
(@背面的ip地点为许可衔接的客户端的ip地点,假如改成 '%',就示意客户端没有ip地点的限定)
假如主效劳器的数据库(test)中,已有数据,我们需要先手动把主效劳器中的数据复制到从效劳器。要领以下:
在本案例中,我们只备份一个数据库(test),test中有一个表basic_user,表中也已有了数据。为了防备我们复制数据的时刻,数据库test中的数据发作更新,我们需要先锁定数据库,敕令以下:
flush tables with read lock;
这个敕令是全局读锁定,它会给主效劳器中的一切数据库都加上读锁,这里趁便说一下读锁和写锁的区分:
read lock(读锁):也叫同享锁,许可一切的读操纵,但壅塞写操纵,即一切衔接只能够读数据,但不许可写数据。
write lock(写锁):也叫排它锁、独有锁,只许可当前衔接的读和写,不许可其他并发的读操纵和写操纵。
锁定主效劳器的数据库后,我们在从效劳器中,也建立一个数据库test,并将一切的表(包含表构造和表数据)都导入。
然后,我们实行下面的敕令,解锁:
unlock tables;
检察主效劳器的 master 状况:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 | 498 | test | mysql | |
+------------------+----------+--------------+------------------+-------------------+
从效劳器设置:
修正从效劳器的数据库设置文件(E:\mysql\my.ini),在 [mysqld] 标签的最下面,增加以下代码:
#端口
port = 3307
#效劳器id
server_id = 2
#开启二进制日记(从效劳器不是必需要开启二进制日记)
log-bin=mysql-bin
保留退出,重启MySQL效劳。
衔接MySQL从效劳器:
mysql -uroot -p -P3307
设置复制的参数:
change master to master_host='127.0.0.1',master_user='user01',master_password='123456',master_port=3306,master_log_file='mysql-bin.000008',master_log_pos=498;
参数详解:
master_host: 主效劳器的IP
master_user: 主效劳器上新建立的用户名
master_password: 用户的暗码
master_port: 主效劳器的端口,假如不曾修正,默许即可。
master_log_file: 主效劳器二进制日记文件的称号,填写检察主效劳器的master状况时显现的File的值
master_log_pos: 日记的位置,填写检察主效劳器的master状况时显现的Position的值
启动从效劳器的slave复制功用:
start slave;
检察从效劳器的slave状况:
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: user01
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 120
Relay_Log_File: hp-PC-relay-bin.000004
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
假如 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes,则申明主从复制的一切设置已胜利,即从效劳器已能够自动与主效劳器的数据库数据完成同步了。
今后,只需主效劳器的数据有更新(比方:在 test数据库中新建了一张表或许表中的数据发作了变化),从效劳器都邑自动与主效劳器保持一致。但假如有人锐意改变了从效劳器的数据,主效劳器中的数据并不会同步更新,除非我们把这两个MySQL效劳器设置为互为主从。
以上是我整理到的有关在window环境下设置mysql的主从架构,感兴趣的小伙伴们能够去尝试看看。
相干文章:
windows下装置mysql-5.7.21
MySQL 基础知识小结
navicat for mysql下载装置以及简朴的运用
以上就是怎样在一台windows主机上完成MySQL的主从复制?的细致内容,更多请关注ki4网别的相干文章!