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

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

一、环境准备

  • 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.一、修改主库配置文件

先在主数据库中建立新数据库rep_test。html

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

在 [mysqld] 节点中增长或修改以下内容:sql

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

 

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 的密码centos

 

2.三、查看主服务器状态

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

mysql>show master status;

2.四、修改从库配置文件

在从数据库中建立新的数据库rep_test。架构

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

在 [mysqld] 节点中增长以下内容:ide

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

2.五、设置从库slave

重启从数据库,设置登陆主数据库的帐号和密码等信息,而后启动slave测试

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

2.六、查看从数据库的信息

mysql>show slave status \G;

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

2.七、测试主从复制

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

2.八、清除主从关系

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, 0 rowsaffected (0,00 sec) mysql>reset slave all; QueryOK, 0 rowsaffected (0,04 sec) mysql> show slave status\G Emptyset (0,00 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.000002  mysql-bin.000005 mysqld_safe.pid public_key.pem sys ca-key.pem  client-key.pem   ib_logfile0  imove                      mysql                      mysql-bin.000003  mysql-bin.000006  performance_schema  server-cert.pem ca.pem ib_buffer_pool ib_logfile1 localhost.localdomain.err mysql-bin.000001           mysql-bin.000004  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.000006 | 16663694 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec) mysql>

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

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

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

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

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

RESET SLAVE

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

登陆从数据库,未删除前

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

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

mysql> stop slave; Query OK, 0 rows affected (0.01 sec) mysql> reset slave; Query OK, 0 rows affected (0.04 sec) mysql> show slave status\G; *************************** 1\. row *************************** Slave_IO_State: Master_Host: 192.168.47.167 Master_User: server Master_Port: 3306 Connect_Retry: 60 Master_Log_File: Read_Master_Log_Pos: 4

**   Relay_Log_File: mysql02-relay-bin.000001 Relay_Log_Pos: 4**

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

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

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

3.一、修改主库配置文件

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

在从数据库中建立新的数据库landclash。

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

server-id=1 #指定惟一的ID,1至32,必须的 log-bin=mysql-log-bin #指定二进制日志存放路径,必须的 binlog-do-db=landclash #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.二、主数据库中锁定全部的表

重启主数据库,而后在主数据库中锁定全部的表

mysql>flush tables with read lock;

3.三、查看主服务器状态

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

mysql>show master status;

3.四、数据拷贝

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

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

3.五、修改从库配置文件

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

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

3.六、设置从库slave

重启从数据库,由于主数据库在从新配置my.ini后,日志文件变成新的文件,因此须要再次设置登陆主数据库的帐号和密码等信息

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

3.七、查看从数据库的信息

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

mysql>show slave status \G;

咱们看到红框标注的地方跟以前作新数据库主从复制不同了。

3.八、主数据库解锁

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

mysql>unlock tables;

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

四、数据库备份

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 landclash > c:\db_bak\landclash_%Ymd%.sql @echo on rem *******************************Code End*****************************
  • 文件备份 DataBackupFile.bat 
    *******************************Code Start***************************** net stop mysql xcopy "C:\ProgramData\MySQL\MySQL Server 5.6\data\landclash\*.*" "c:\db_bak\landclash\%date:~0,10%\" /S /I
    xcopy "C:\ProgramData\MySQL\MySQL Server 5.6\data\ibdata1" "c:\db_bak\landclash\%date:~0,10%\" /S /I
    net start mysql *******************************Code End *****************************

4.二、增量备份

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

一、首先作一次完整备份:

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

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

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

三、再在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.三、恢复

一、首先导入全备数据

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

也能够直接在mysql命令行下面用source导入

mysql>source "test.sql"

二、恢复bin-log.000002

mysqlbinlog bin-log.000002 |mysql -h192.168.103.207  -P3307 -uroot123 -proot123

三、恢复部分 bin-log.000003

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

能够用以下参数来控制binlog的区间

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

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

找到恢复点后,既能够开始恢复。

mysqlbinlog mysql-bin.000003 --stop-position=208 |mysql -h192.168.103.207  -P3307 -uroot123 -proot123
相关文章
相关标签/搜索