Window环境下配置MySQL 5.6的主从复制、备份恢复

时间:2022-09-12 18:05:29

1、环境准备

  • Windows 7 64位
  • MySQL 5.6
  • 主库:192.168.103.207
  • 从库:192.168.103.208
  • navicat无法连接MySQL8解决方案
    #修改加密规则
    ALTER USER 'root123'@'%' IDENTIFIED BY 'root123' PASSWORD EXPIRE NEVER;
    #更新密码(mysql_native_password模式)
    ALTER USER 'root123'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';

2、配置新数据库的主从复制

2.1、修改主库配置文件

先在主数据库中创建新数据库rep_test。

然后编辑主数据库的 my.ini 文件

在 [mysqld] 节点中增加或修改如下内容:

server-id= #指定唯一的ID,1至32,必须的
log-bin=mysql-log-bin #指定二进制日志存放路径,必须的
binlog-do-db=rep_test #指定要同步的数据库,必须的
#binlog-ignore-db=mysql #指定不要同步的数据库,如果指定了binlog-do-db就不用再指定该项

2.2、配置主库备份账户

重启主数据库,然后在主数据库中建立一个备份账户

mysql>grant replication slave on *.* to slave@192.168.103.208 identified by 'slave123' ;
mysql>flush privileges;

PS:identified by 指定的slave是账号slave@192.168.1.128 的密码

2.3、查看主服务器状态

显示主服务器的状态信息,并且找到File 和 Position 的值记录下来;

mysql>show master status;

Window环境下配置MySQL 5.6的主从复制、备份恢复

2.4、修改从库配置文件

在从数据库中创建新的数据库rep_test。

然后编辑从数据库的 my.ini 文件

在 [mysqld] 节点中增加如下内容:

server-id= #指定唯一的ID,2至32,必须的,并且不能跟主数据库一样
replicate-do-db=rep_test #指定要同步的数据库,必须的
#replicate-ignore-db=mysql #指定不要同步的数据库,

2.5、设置从库slave

重启从数据库,设置登录主数据库的账号和密码等信息,然后启动slave

mysql>change master to master_host='192.168.103.207',master_port=,master_user='slave',master_password='slave123', master_log_file='mysql-log-bin.000001',master_log_pos=;
mysql>start slave;

2.6、查看从数据库的信息

mysql>show slave status \G;

如果出现: Slave_IO_Running: Yes      Slave_SQL_Running: Yes以上两项都为Yes,那说明没问题了

Window环境下配置MySQL 5.6的主从复制、备份恢复

2.7、测试主从复制

在主数据库中创建一个新的表,然后再切换到从数据库查看是否同样多出同名的数据库

Window环境下配置MySQL 5.6的主从复制、备份恢复

2.8、清除主从关系

mysql主从复制中,需要将主从复制关系清除,需要取消其从库角色。这可通过执行 RESET SLAVE ALL 清除从库的同步复制信息、包括连接信息和二进制文件名、位置。从库上执行这个命令后,使用show slave status将不会有输出。

reset slave是各版本Mysql都有的功能,在stop slave之后使用。主要做:
删除master.info和relay-log.info文件;
删除所有的relay log(包括还没有应用完的日志),创建一个新的relay log文件;
从Mysql 5.5开始,多了一个all参数。如果不加all参数,那么所有的连接信息仍然保留在内存中,包括主库地址、端口、用户、密码等。这样可以直接运行start slave命令而不必重新输入change master to命令,而运行show slave status也仍和没有运行reset slave一样,有正常的输出。但如果加了all参数,那么这些内存中的数据也会被清除掉,运行show slave status就输出为空了。
mysql>stop slave;
QueryOK, rowsaffected (, sec) mysql>reset slave all;
QueryOK, rowsaffected (, sec) mysql> show slave status\G
Emptyset (, sec)

RESET MASTER

功能说明:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。用于第一次进行搭建主从库时,进行主库binlog初始化工作;
测试如下:

未删除前

[root@mysql01 mysql]# pwd
/usr/local/data/mysql
[root@mysql01 mysql]# ls
auto.cnf client-cert.pem ibdata1 ibtmp1 localhost.localdomain.pid mysql-bin. mysql-bin. mysqld_safe.pid public_key.pem sys
ca-key.pem client-key.pem ib_logfile0 imove mysql mysql-bin. mysql-bin. performance_schema server-cert.pem
ca.pem ib_buffer_pool ib_logfile1 localhost.localdomain.err mysql-bin. mysql-bin. mysql-bin.index private_key.pem server-key.pem
[root@localhost bin]# ./mysql -uroot -p123456
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin. | | | | |
+------------------+----------+--------------+------------------+-------------------+
row in set (0.00 sec)
mysql>

当前有6个binlong日志,且Position的位置为16663694
运行RESET MASTER

mysql> reset master;
Query OK, rows affected (0.03 sec) mysql> show master status\G;
*************************** . row ***************************
File: mysql-bin.
Position:
Binlog_Do_DB:
Binlog_Ignore_DB:
row in set (0.00 sec)

显示所有的binlog已经被删除掉,且binlog从000001 开始记录

注:当数据库要清理binlog文件的时候,可以通过操作系统进行删除,也可以运行reset master进行删除。但是如果当前是主数据库,且主从数据库正常的时候,千万不能用这种方式删除。

【使用场景】第一次搭建主从数据库时,用于主库的初始化binglog操作。

RESET SLAVE

功能说明:用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件;
测试如下:

登录从数据库,未删除前

mysql> show slave status\G;
*************************** \. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.47.167
Master_User: server
Master_Port:
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos: Relay_Log_File: mysql02-relay-bin.
Relay_Log_Pos: Relay_Master_Log_File: mysql-bin.

当前relaylog为0004;
先停止slave,运行RESET MASTER

mysql> stop slave;
Query OK, rows affected (0.01 sec)
mysql> reset slave;
Query OK, rows affected (0.04 sec)
mysql> show slave status\G;
*************************** \. row ***************************
Slave_IO_State:
Master_Host: 192.168.47.167
Master_User: server
Master_Port:
Connect_Retry:
Master_Log_File:
Read_Master_Log_Pos: ** Relay_Log_File: mysql02-relay-bin.
Relay_Log_Pos: **

RESET SLAVE将使SLAVE忘记主从复制关系的位置信息。该语句将被用于干净的启动, 它删除master.info文件和relay-log.info 文件以及所有的relay log 文件并重新启用一个新的relaylog文件。

使用场景:当原来的主从关系被破坏之后,从库经过重新初始化后直接连接会报 ERROR 1201的错误,运行reset slave后,重新配置主从连接就可以了;

3、配置旧数据库的主从复制

3.1、修改主库配置文件

如果一开始数据库的架构不是主从复制,并且运行一段时间后已经有数据存在,那配置的方式略有不同。

在从数据库中创建新的数据库land*。

编辑主数据库的 my.ini 文件,使用以下内容:

server-id= #指定唯一的ID,1至32,必须的
log-bin=mysql-log-bin #指定二进制日志存放路径,必须的
binlog-do-db=land*
#binlog-ignore-db=mysql #指定不要同步的数据库,如果指定了binlog-do-db就不用再指定该项

配置主库备份账户

mysql>grant replication slave on *.* to slave123@192.168.103.208 identified by 'slave123' ;
mysql>flush privileges;

3.2、主数据库中锁定所有的表

重启主数据库,然后在主数据库中锁定所有的表

mysql>flush tables with read lock;

3.3、查看主服务器状态

显示主服务器的状态信息,并且找到File 和 Position 的值记录下来;

mysql>show master status;

Window环境下配置MySQL 5.6的主从复制、备份恢复

3.4、数据拷贝

将主数据库data目录下需要做主从复制的数据库的同名目录拷贝到从数据库的data目录下

注意:拷贝的话也要拷贝 ibdata1 文件,不然会不显示表结构

Window环境下配置MySQL 5.6的主从复制、备份恢复

3.5、修改从库配置文件

编辑从数据库的 my.ini 文件,加上一下内容:

server-id= #指定唯一的ID,2至32,必须的,并且不能跟主数据库一样
replicate-do-db=land* #指定要同步的数据库,必须的
#replicate-ignore-db=mysql #指定不要同步的数据库,

3.6、设置从库slave

重启从数据库,因为主数据库在重新配置my.ini后,日志文件变成新的文件,所以需要再次设置登录主数据库的账号和密码等信息

mysql> stop slave;
mysql>change master to master_host='192.168.103.207',master_port=,master_user='slave123',master_password='slave123', master_log_file='mysql-log-bin.000001',master_log_pos=;
mysql>start slave;

Window环境下配置MySQL 5.6的主从复制、备份恢复

3.7、查看从数据库的信息

再次输入查看从数据库状态的命令

mysql>show slave status \G;

我们看到红框标注的地方跟之前做新数据库主从复制不一样了。

Window环境下配置MySQL 5.6的主从复制、备份恢复

3.8、主数据库解锁

完成上述配置后,回到主数据库,将表解锁

mysql>unlock tables;

之后在主数据库的修改就能同步到从数据库上了。

4、数据库备份

4.1备份脚本

  • sql备份 DataBackupSql.bat
    rem *******************************Code Start*****************************
    @echo off set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
    "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump" -P3307 -uroot123 -proot123 land* > c:\db_bak\land*_%Ymd%.sql
    @echo on
    rem *******************************Code End*****************************
  • 文件备份 DataBackupFile.bat 
    *******************************Code Start*****************************
    net stop mysql
    xcopy "C:\ProgramData\MySQL\MySQL Server 5.6\data\land*\*.*" "c:\db_bak\land*\%date:~0,10%\" /S /I
    xcopy "C:\ProgramData\MySQL\MySQL Server 5.6\data\ibdata1" "c:\db_bak\land*\%date:~0,10%\" /S /I
    net start mysql
    *******************************Code End *****************************

4.2、增量备份

小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了mysql的binlog志。

1、首先做一次完整备份:

mysqldump -h192.168.103.  -P3307 -uroot123 -proot123  --single-transaction  --master-data= test > test.sql

这时候就会得到一个全备文件 test.sql

在sql文件中我们会看到:
-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;是指备份后所有的更改将会保存到bin-log.000002二进制文件中。
2、在test库的t_student表中增加两条记录,然后执行 flush logs 命令。这时将会产生一个新的二进制日志文件bin-log.000003,bin-log.000002则保存了全备过后的所有更改,既增加记录的操作也保存在了bin-log.00002中。

3、再在test库中的a表中增加两条记录,然后误删除t_student表和a表。a中增加记录的操作和删除表a和t_student的操作都记录在bin-log.000003中。

自动增量备份脚本:

IncreaseDB.sql

flush logs;

DataBackupFile_IncreaseDB.bat

*******************************Code Start*****************************
"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe" -P3307 -uroot123 -proot123 < "C:\Program Files\MySQL\MySQL Server 5.6\bin\IncreaseDB.sql"
*******************************Code End *****************************

4.3、恢复

1、首先导入全备数据

mysql -h192.168.103.  -P3307 -uroot123 -proot123 < test.sql

也可以直接在mysql命令行下面用source导入

mysql>source "test.sql"

2、恢复bin-log.000002

mysqlbinlog bin-log. |mysql -h192.168.103.  -P3307 -uroot123 -proot123 

3、恢复部分 bin-log.000003

在general_log中找到误删除的时间点,然后更加对应的时间点到bin-log.000003中找到相应的position点,需要恢复到误删除的前面一个position点。

可以用如下参数来控制binlog的区间

--start-position 开始点 --stop-position 结束点

--start-date 开始时间  --stop-date  结束时间

找到恢复点后,既可以开始恢复。

mysqlbinlog mysql-bin. --stop-position= |mysql -h192.168.103.  -P3307 -uroot123 -proot123

Window环境下配置MySQL 5.6的主从复制、备份恢复的更多相关文章

  1. Window环境下配置MySQL 5&period;6的主从复制

    原文:Window环境下配置MySQL 5.6的主从复制 1.环境准备 Windows 7 64位 MySQL 5.6 主库:192.168.103.207 从库:192.168.103.208 2. ...

  2. Centos 7环境下配置MySQL 5&period;7读写分离

    1.实验目的: 实现在Centos 7系统环境下,MySQL5.7读写分离. 2.实验条件: MySQL主服务器:Centos 7桌面环境,IP:10.10.11.31 MySQL从服务器:Cento ...

  3. linux环境下配置mysql双主复制

    简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...

  4. Mac 环境下配置 MySQL 以及 Mac终端登录MySQL

    1.首先mysql官网下载Mac 版 mysql直接安装 2.打开偏好设置-> MySQL -> 查看是否开启mysql服务 3.打开终端 进入mysql目录: /usr/local/my ...

  5. Window环境下配置Redis服务的方法及查看缓存数据的工具介绍

    工具下载位置:http://pan.baidu.com/s/1hqVh1f2,包括服务端配置以及查看缓存的工具. 服务端是以服务的形式运行,将Redis服务端解压到某个目录,然后执行cmd执行命令: ...

  6. 在window环境下挂载mysql数据卷

    1.提前在指定的目录下创建一个my.cnf文件,目录名最好为英文且不带特殊符号和空格,文件内容如下,注意:粘贴时要把每一行末尾的空格去除,否则运行时会报错说utf8编码错误 [mysqld] user ...

  7. 在Mac OS环境下安装MySQL服务

    在Mac OS环境下安装MySQL服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我之前介绍过window环境下安装mysql服务,以及在Linux环境下安装mysql服务,今 ...

  8. 【转】mysql8&period;0 在window环境下的部署与配置

    [转]mysql8.0 在window环境下的部署与配置 今天在阿里云window服务器上配置mysql环境,踩了一些坑,分享出来.需要的朋友可以看看.额,或许有人要吐槽我为什么不在linux上去配置 ...

  9. mysql8&period;0 在window环境下的部署与配置

    今天在阿里云window服务器上配置mysql环境,踩了一些坑,分享出来.需要的朋友可以看看.额,或许有人要吐槽我为什么不在linux上去配置,额,因为我window的那台服务器配置相对高些.本人技术 ...

随机推荐

  1. 深入理解javascript原型和闭包(12)——简介【作用域】

    提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:“javascript没有块级作用域”.所谓“块”,就是大括号“{}”中间的语句.例如if语句: 再比如for语句: 所以,我们在编写代码的时 ...

  2. 1&colon;时间戳转换成年月日函数,2&colon;url截取参数方法,3&colon;弹窗自定义方法 4&colon;点击按钮加入购物车

    最近一直在使用vue.js来构建项目,先分享一下一些简单可复用的函数. 1:时间戳转换Date.prototype.format = function(fmt){ //author: yumeiqia ...

  3. Erlang安装笔记

    今天,为了安装RabbitMQ,需要安装Erlang,中间遇到了一些坑,记录下来. 1. 下载Erlang安装包 http://www.erlang.org/downloads http://erla ...

  4. Ubuntu 14&period;04 配置 Java SE

    首先下载Java SE,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html: 下载后把压缩包拷贝到自定义的目 ...

  5. Java日期计算之Joda-Time

    http://rensanning.iteye.com/blog/1546652 Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK D ...

  6. Spring Boot 参数校验

    1.背景介绍 开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码 这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已. 接下来,用Validation来改写这段 2.Spr ...

  7. vb&period;net 使用ip查詢&lpar;Host Name&rpar;&lpar;WorkGroup Name&rpar;&lpar;MAC Address&rpar;-運用cmd及nbtstat命令

    Sub nbtstat(ByVal ip As String) Dim strRst, strRst1, strRst2, strRst3 As String Dim n1, n2, n3 As In ...

  8. Mafly&period;Mail实现发送邮件

    安装 打开程序包管理器控制台,执行命令:Install-Package Mafly.MailInstall-Package Newtonsoft.Json.dll 安装之后,项目会自动创建一个Conf ...

  9. kafka 单机配置

    http://blog.csdn.net/jingshuigg/article/details/24439637 . su root : chown -R hadoop:hadoop version- ...

  10. linux中截取文件的特定字节(去掉utf-8 bom头)

    事出有因,之所以要截取特定字节,是为了给utf-8编码的文件去掉bom头. bom头好去啊,notepad++文本编辑器中就有这个功能啊.可是,问题所在是要编辑的文件太大了,300MB,小电脑卡shi ...