MySQL实现实时备份的配置过程详解

前面笔者在其他随笔中有说过,公司数据库选用的是免安装版并且是在Windows上,等过段时间我会将数据库迁移至Linux

因公司开发操作数据库之多,如不及时备份,万一操作失误,恢复可就成难题了

此篇随笔将介绍如何进行 MySQL 的实时备份

 

环境介绍

 

两台服务器进行主从同步复制(安装可以通过google查询相关资料或者看笔者的这篇免安装版)

利用Windows脚本和Windows自带的计划任务,将主服务器进行实时备份(下面进行演示)

Maseter MySQL: 192.168.1.253

Slave    MySQL: 192.168.1.254

在主服务器上开启二进制日志功能,设置唯一的服务器ID编号,这些设置需要重启MySQL服务

在从服务器上设置唯一的服务器ID编号,这些设置需要重启MySQL服务

在主服务器上为了不用从服务器创建可以读取主服务器日志文件的用户,或使用相同的统一用户

在进行数据复制之前,需要记录主服务器上二进制文件的位置的标记

在进行数据复制之前,保证从服务器和主服务器上的数据一致

回到顶部

 

主服务器的配置

在实际的环境中,可能在我们还没有部署数据库的同步前,数据库中就已经存在大量的数据。所以,在操作数据库的时候一定记住备份

mysqldump -u root -p --all-databases --lock-all-tables > G:/dbdump.sql
Enter password: ******

我们需要在主服务器上开启二进制日志并设置服务器编号,服务器唯一编号是2的32次方减1之间的整数,根据自己的实际情况而设置

进行这些设置需要关闭MySQL数据库并编辑my.ini或者my.cnf文件,然后在[mysqld]是指段添加相应的配置选项

C:\Users\Administrator>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。 
[mysqld]
log-bin=mysql-bin
server-id=1 
C:\Users\Administrator>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
为了使从服务器能够同步复制,我们需要创建一个同步复制的用户

执行数据复制时,所有的从服务器都需要使用用户与密码连接MySQL主服务器,所以在主服务器上必须存在至少一个用户及相应的密码提供从服务器来连接

但是这个用户必须拥有"REPLICATION SLAVE" 权限,当然你可以给不同的从服务器创建不用的用户与密码,也可以使用统一的用户与密码

如果该用户仅为数据库复制所使用,则该用户仅需要"REPLICATION SLAVE"权限即可

C:\Users\Administrator>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.25 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY 'slaveAdmin';
Query OK, 0 rows affected (0.02 sec)
 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
Bye
获取主服务器二进制日志信息

 首先我们来了解一下二进制文件的基本信息,这些信息在对从服务器的设置需要用到,它包括服务器二进制文件名称及当前日志记录位置,这样从服务器就可以知道哪里开始进行复制操作

当我们得到二进制文件名以及二进制当前记录的位置时请牢记,在从服务器上会用到

从服务器的配置

 和主服务器一样,需要配置my.ini或者my.cnf 文件,注意这里的从服务器ID编号

C:\Users\Administrator>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。 
[mysqld]
server-id=2 
C:\Users\Administrator>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

对于复制而言,MySQL从服务器二进制功能是不需要开启的,当然也可以开启从服务器上的二进制功能来实现数据备份与恢复

•在介绍里面我已经说到在进行数据复制之前,保证从服务器和主服务器上的数据一致,还记得我刚才将主服务器的MySQL进行备份吗?! 可以将这备份还原到从服务器上面,这样主从的数据就是一样的了

 

mysql -u root -p < D:/dbdump.sql

 

Enter password: ******

 

•配置从服务器连接主服务器进行数据复制

 

1.其实数据复制的关键操作是配置从服务器去连接主服务器进行数据复制,我们需要告诉从服务器建立网络连接所有必要的信息

2.使用 CHANGE MASTER TO 语句完成与主服务器的连接工作

 

   † MASTER_HOST 指定主服务器主机名或者Ip地址

 

   † MASTER_USER 为刚才在主服务器上创建的拥有复制权限的用户

 

   † MASTER_PASSWORD 为改用户的秘密

 

   †  MASTER_LOG_FILE 指定主服务器二进制日志文件名称

 

   † MASTER_LOG_POS 指定主服务器二进制日志文件当前的位置

1.START LSAVE 开启从服务器功能进行主从连接

2.SHOW SLAVE STATUS 查看从服务器状态

mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.1.253',
    -> MASTER_USER='slave',
    -> MASTER_PASSWORD='slaveAdmin',
    -> MASTER_LOG_FILE='mysql-bin.000004',
    -> MASTER_LOG_POS=9876212;
Query OK, 0 rows affected (0.00 sec) 
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G;
查看状态时,下面两个都要为 YES 说明才是正常运行状态,如果IO为No 则检查密码或者从新写入

查看状态时,下面两个都要为 YES 说明才是正常运行状态,如果IO为No 则检查密码或者从新写入

Slave_IO_Running:

Slave_SQL_Running:

现在当我们在主服务器上创建一个数据库时,我们再到从服务器上查看,这时就可以看到已经把主服务器上新创建数据库的同步过来了

mysql> create database vforbox;
Query OK, 1 row affected (0.00 sec)
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| vforbox            |
+--------------------+
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| vforbox            |
+--------------------+
Windows 定时备份数据库脚本

上面介绍中已经提到用Windows脚本和Windows自带的计划任务,将主服务器进行实时备份

这里笔者献上代码,如有更好的脚本推荐请发至笔者的邮箱

新建一个 "mysql_auto_bak.bat"

@echo off
cls
color 3E
title %date% %time:~,5% 备份MySQL数据库 By:vforobx
::::::::::::::::::::::::以下是需要配置的参数::::::::::::::::::::::::::::::::::::::::
 
        rem 设置 MySQL服务器root账号的密码,特殊符号需要在其前添加两个^
        SET MySQL_pw=123456
        rem 设置 数据库备份目录
        SET BAK_dir=D:\mysqlbak
        rem 设置 需要备份的myisam格式数据库
        SET BAK_db_myisam=myisam_db
        rem 设置 需要备份的innodb格式数据库
        SET BAK_db_innodb=innodb
        rem 设置 WinRAR压缩软件的路径
        SET RAR_dir="C:\Program files (x86)\WinRAR\WinRAR.exe"
        rem 设置 以2015-10-01格式的日期为子目录
        SET BAK_dir2=%date:~0,4%-%date:~5,2%-%date:~8,2%
        rem 设置 备份文件名
        SET BAK_file=%%i_%BAK_dir2%.sql
        rem 设置日志文件里面指向的rar文件路径
        SET BAK_file2=%%i_%BAK_dir2%
        rem 设置 日志文件名
        SET LOG_file=%BAK_dir%\%BAK_dir2%\Mysql_bak.log
 
::::::::::::::::::::::::以上是需要配置的参数::::::::::::::::::::::::::::::::::::::::
 
::::::::::::::::::::::::以下是判断变量是否定义::::::::::::::::::::::::::::::::::::::
 
if not defined MySQL_pw (echo MySQL_pw 尚未定义!)
if not defined BAK_dir (echo BAK_dir 尚未定义!)
if not defined RAR_dir (RAR_dir 尚未定义!)
 
::::::::::::::::::::::::以下是记录时间日志::::::::::::::::::::::::::::::::::::::::::
 
if not defined BAK_db_myisam (goto innodb)
echo. 开始以当前日期创建文件夹
if not exist %BAK_dir%\%BAK_dir2% md %BAK_dir%\%BAK_dir2%
cd /d %BAK_dir%\%BAK_dir2%
echo. 开始建立(%BAK_dir2%)的备份
::::::::::::::::::::::::以下是备份的核心代码::::::::::::::::::::::::::::::::::::::::
 
echo 备份时间: %BAK_dir2% %time:~0,8%  >> %LOG_file%
echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> %LOG_file%
SETLocal DisableDelayedExpansion
for %%i in (%BAK_db_myisam%) do (
mysqldump -h 192.168.1.253 -uroot -p%MySql_pw% --all-databases >%BAK_file%
%RAR_Dir% a %BAK_file:~0,-4%.rar %BAK_file%
DEL /F /A /Q %BAK_file%
echo 数据库【%%i 格式】已经备份到: %BAK_dir%\%BAK_dir2%\%BAK_file2%.rar >> %LOG_file%)
::::::::::::::::::::::::以下是 innodb格式的备份代码::::::::::::::::::::::::::::::::::
 
if not defined BAK_db_innodb (goto exitbat)
echo. 开始以当前日期创建文件夹
if not exist %BAK_dir%\%BAK_dir2% md %BAK_dir%\%BAK_dir2%
cd /d %BAK_dir%\%BAK_dir2%
echo. 开始建立今天(%BAK_dir2%)的备份
SETLocal DisableDelayedExpansion
for %%i in (%BAK_db_innodb%) do (
mysqldump -h 192.168.1.253 -uroot -p%MySQL_pw% --all-databases >%BAK_file% 
%RAR_dir% a %BAK_file:~0,-4%.rar %BAK_file%
DEL /F /A /Q %BAK_file%
echo 数据库【%%i 格式】已经备份到:%BAK_dir%\%BAK_dir2%\%BAK_file2%.rar >> %LOG_file%)
echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> %LOG_file%
echo. 所有备份建立完毕
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rem 清除变量
        SET MySQL_pw=
        SET BAK_dir=
        SET RAR_dir=
        SET BAK_dir2=
        SET BAK_file=
        SET BAK_file2
        SET LOG_file=

时间: 2024-08-02 17:11:51

MySQL实现实时备份的配置过程详解的相关文章

搭建基于Linux 6.3+Nginx 1.2+PHP 5+Mysql 5.5的Web服务器过程详解

之前的Web服务器都是通过yum搭建的,想要添加新模块或者更新某些软件都很不方便(牵一发而动全身啊!).所以,现在准备将环境改为源码编译安装,这样便于调整,性能上也会比yum方式好很多.以下是我的安装步骤,我的系统是CentOS 6.3 64位. 注意:本文所以配置都是基于第二步所下载的软件版本,安装其他版本不保证会成功 一:安装依赖包 123456 yum install cmake make gcc gcc-c++ libjpeg libjpeg-devel libpng \ libpng-

WCF分布式开发步步为赢(2)自定义托管宿主WCF解决方案开发配置过程详解

上一节WCF分布式开发步步为赢(1):WCF分布式框架基础概念我们介绍了WCF服务的概念和通信框架模型,并给出了基于自定义托管服务的WCF程序的实现代码.考虑到WCF分布式开发项目中关于托管宿主服务配置和客户端添加引用.两个环节最容易出错.对于大部分想学习WCF分布式开发的人来说,成功开发.配置.部署第一个自己的WCF服务困难重重.很多资料都介绍了WCF的基本概念.但是对于实际的项目开发过程介绍粗略,给入门者带来诸多不便.今天我们就来补充一节WCF分布式开发一个完整解决方案的开发和配置过程.本节

mysql 5.5数据库主从配置步骤详解

上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别.    系统:centos 5.x    需要的软件包:mysql-5.5.33.tar.gz    环境准备:         服务器a:192.168.10.151 (主)         服务器b:192.168.10.152 (从)   1.安装前准备 wget http://mysql.llarian.net/Downloads/MySQL-5.5

SQL Server 2008事务日志传送备份的实施过程详解

熟悉微软企业级数据库软件朋友,了解作为微软一个重大的产品版本,SQL Server 2008除了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本外,其实SQL Server 2008中的备份方式也是其一大亮点,SQL Server 2008使用的备份一个数据库有多种方法,如差异备份和事物日志备份.事务日志备份将复制上次完全或以前的事务日志备份的所有数据变化.事物日志备份通常是非常快并且非常小,仅次于镜像的高可靠性备份方案,可以达到分钟级的灾难恢复能力. 下面

MySQL分库分表的实现过程详解介绍

MySQL分库分表基础表介绍 表基本模型结构 这里我们模拟一个商城的基本的表结.此结构由(用户.门店.导购.门店商品.订单.订单对应的商品).其中,导购也是一个用户,门店是只属于一个店主的,同时店主本身也是一个导购也是一个普通用户. 结构图:   构造数据脚本 MySQL分库分表(1)-脚本 对业务场景进行模拟 场景1:购买者下订单. 1.从session中获得客户ID. 2.可以通过时间戳等拼凑一个订单ID(在创建表的时候为了方便我用自增的,在以下我们一直就吧订单ID看成不是自增的,是用程序生

基于Linux网关服务器squid配置过程详解_Linux

前言 在此,我们要配置一个只对内部网络提供代理服务的 Proxy Server.它具有如下功能它将用户分为高级用户和普通用户两种,对高级用户采用网卡物理地址识别的方法, 普通用户则需要输入用户名和口令才能正常使用. 高级用户没有 访问时间和文件类型的限制,而普通用户只在上班时可以访问以及一些其它的限制. 安装 从源中安装 源中自带稳定版本,执行下面的命令进行安装 sudo apt-get install squid squid-common 源码编译安装 当然你也可以到官方网站下载最新的版本进行

Pam的配置过程详解

PAM:可插拔的认证模块 模块  /lib/security 接口文件  /etc/pam.d/ type auth  验证是否有该帐号 account  口令 帐号是否过期 password  用户修改口令 session   会话过程 control required    必须通过,           如果没有通过 ,测底否定  ,而且还要看后续模块           如果通过 ,且还要看后续模块 requisite   必须通过,           如果没有通过 ,测底否定  ,而

storm集群部署和配置过程详解

  先整体介绍一下搭建storm集群的步骤: 设置zookeeper集群 安装依赖到所有nimbus和worker节点 下载并解压storm发布版本到所有nimbus和worker节点 配置storm.yaml 启动相关后台进程 1 首先配置zookeeper集群      我们知道storm通过zookeeper来协调整个集群.zookeeper不是用来做消息传递,因此storm不会给zookeeper带来很大的压力.单节点的zookeeper在大多情形下是可以胜任的,但是如果你想得到更好的可

centos系统keepalived安装和配置过程详解

[keepalived安装] 1.下载keepalived. wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz 2.编译安装 yum install -y gcc openssl openssl-devel ipvsadm libnl-devel tar zxvf keepalived-1.2.13.tar.gz cd keepalived-1.2.13 ./configure --sysconfdir=/etc