1. MySQL热备份主要分为两种
1 )主从备份(单向) )。
主服务器的数据实时备份到从服务器,从服务器的数据与主服务器一致。 用户只允许对主服务器中的数据进行操作。
2 )主备份(双向) )
两个数据库服务器同时决定主从,用户可以同时对数据进行两侧操作,自动保持两个数据库的数据一致。
注意:采用自包含身份冲突(需要额外配置)
(
自动输入=2# # # #每次增加2 (支持几个备份的服务器数量) ) )。
自动输入偏移=1# # # #开始ID为1
)
2 .备份原理概述
【ref:http://blog.csdn.net/bmdwnyao 02123202/article/details/19323399】
简单地说,只要两个数据库具有相同的初始状态,就可以通过在一个服务器上执行的sql语句在另一个服务器上重复执行来实现同步。
当然,这种复制和重复是由mysql自动实现的。 只需配置即可。
详细说明原理。 这有一张图:
上图显示了将数据从一个主服务器(master )同步到从服务器(slave )的过程。
这是主-从复制的示例。 主-主相互复制只需把上面的例子倒过来再做一次。
对于mysql服务器,通常有两个复制和负责复制的线程。 打开复印后。
1 )作为主服务器Master,每次自己的变更都记录在二进制日志Binarylog中。 (来从服务器中读取此log,然后在自己的地方再次运行。 )
2 )以来自服务器的Slave身份,用master上的帐户登录master,读取master的Binarylog,并写入自己的中继日志Relaylog。 然后,它的sql线程负责读取该中继日志并执行一次。 到目前为止,主服务器的更改已同步到从服务器。
mysql可以显示当前服务器的主、从状态。 实际上是现在服务器的Binary (主服务器的作用)的状态和位置。 然后,其RelayLog (作为从服务器)的复制的进展情况。
例如,要在主体服务器上查看主体状态:
mysql show master statusG
* * * * * * * * * * * * *1. row * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1* * * * * * *1* * * * * * * * * * 1
File: mysql-bmdwn.000002
位置: 742409
Binlog_Do_DB: mail_info
Binlog_Ignore_DB:
1原始插入(0.00秒)。
我来解释一下这几行的意思:
1 )第一行表示当前记录的bmdwnarylog文件名为bmdwnary-bmdwn.000002。
此文件位于mysql数据目录中
数据目录:
在windows上,c :program dataMySQLMySQL server 5.6data((或其他具体安装目录下) ) ) )。
linux下:/usr/local/mysql/data/
2 )第二行,742409 )指示当前文件偏移量,并写入bmdwnary-bmdwn.000002文件的记录位置。
这两点构成主服务器的状态。 配置从属服务器时,必须使用这两个值。 我会告诉你从服务器中读取主服务器的数据。 从服务器登录时,会找到此日志文件,并在此偏移后开始复制。 )
3 )第三和第四行列出了需要记录的数据库以及需要忽略的数据库。 只有需要记录的数据库才会将更改写入bmdwnary-bmdwn.000002日志文件中。
在从服务器上,还可以确认从服务器的复制状态。
1: mysql show slave statusG
23360 * * * * * * * * * * *1. row * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1* row
3: slave _ io _ state 3360 waitingformastertosendevent
43360 master _ host :192.168.1.229 (见具体IP ) ) ) ) ) ) )。
5: Master_User: test (参见具体的user ) ) ) ) ) )。
6: Master_Port: 3306
7: Connect_Retry: 60
8: Master_Log_File: bmdw
nary-bmdwn.0000029: Read_Master_Log_Pos: 742409
10: Relay_Log_File: ***-relay-bmdwn.000003
11: Relay_Log_Pos: 742284
12: Relay_Master_Log_File: bmdwnary-bmdwn.000002
13: Slave_IO_Running: Yes
14: Slave_SQL_Running: Yes
15: Replicate_Do_DB: [需要备份的数据库]
16: Replicate_Ignore_DB:
17: Replicate_Do_Table:[需要备份的数据表]
18: Replicate_Ignore_Table:
19: Replicate_Wild_Do_Table:[需要备份的数据表]
20: Replicate_Wild_Ignore_Table:
21: Last_Errno: 0
22: Last_Error:
23: Skip_Counter: 0
24: Exec_Master_Log_Pos: 742409
25: Relay_Log_Space: 742459
26: Until_Condition: None
27: Until_Log_File:
28: Until_Log_Pos: 0
29: Master_SSL_Allowed: No
………………………………………..
Master_Server_Id: 1
…………………………………………
相关说明:
1). Master_host 指的是 主服务器的地址。
2). Master_user 指的是主服务器上用来复制的用户。 从服务器会用此账号来登录主服务。进行复制。
3). Master_log_file 就是前面提到的, 主服务器上的日志文件名.
4). Read_Master_log_pos 就是前面提到的主服务器的日志记录位置, 从服务器根据这两个条件来选择复制的文件和位置。
5). Slave_IO_Running: 指的就是从服务器上负责读取主服务器的线程工作状态。 从服务器用这个专门的线程链接到主服务器上,并把日志拷贝回来。
6). Slave_SQL_Running: 指的就是专门执行sql的线程。 它负责把复制回来的Relaylog执行到自己的数据库中。 这两个参数必须都为Yes 才表明复制在正常工作。
7). Replicate_Do_Table: 指当主数据库操作数据表时,它所在的数据库为默认数据库(use database),后面的从数据库备份功能才能起效,否者对该数据表的操作不会热备份到从数据库中(不允许跨数据库更新表格)。对应在配置文件中的格式为replicate_do_table=dbname.tablename1 replicate_do_table=dbname.tablename2
8). Replicate_Wild_Do_Table: 不需要强制当前处理的数据库为默认数据库,始终会热备份对应数据表中的数据。配置文件格式如上。
3. 主从热备份配置
【系统:windows 7 with MySQL5.6】
【注意事项:主服务器中的MySQL版本应该低于等于从服务器MySQL版本】
3.1 添加用于备份的用户并授予复制权限
mysql> grant replication slave on *.* to ‘test’@’192.168.1.130’ identified by ‘test’;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
(备注: test为主服务器中创建用于备份的用户,密码为test; 192.168.1.130 为从服务器IP)
3.2 配置主服务器中的my.ini文件
文件位置:
Windows: 默认安装 C:ProgramDataMySQLMySQL Server 5.6my.ini 或者查看MySQL 5.6 Command Line Client 属性中目标里面的值 "--defaults-file=C:ProgramDataMySQLMySQL Server 5.6my.ini"
Linux: /etc/my.cnf
配置内容:
……
[mysqld]
……
# Binary Logging.
log-bmdwn = bmdwnary_log
bmdwnlog-format = mixed
read-only = 0
bmdwnlog-do-db = mail_info
#bmdwnlog-ignore-db = ……
……
# Server Id.
server-id=1 ######### ID 必须唯一 #########
……
重启MYSQL56服务,然后查看master状态
mysql>show master statusG
提示相应信息。
3.3 配置从服务器数据库
my.ini文件修改server-id
……
[mysqld]
……
#备份指定数据表(否则备份数据库下的所有数据表)
replicate_wild_do_table=dbname.tablename1(mail_info.mail_ope_info)
replicate_wild_do_table=dbname.tablename2(根据实际情况确定copy几张表)
......
# Server Id.
Server-id = 2 (必须唯一)
MySQL 5.6 Command Line Client 命令行输入
mysql>change master to
>master_host = ‘192.168.1.229’,
>master_user = ‘test’,
>master_password = ‘test’,
>master_log_file = ’bmdwnary_log.000002’,
>master_log_pos = 120;
备注: host为主服务器IP, user和password 为主服务器中创建用于备份的, log file和position则记录从什么位置开始进行备份。(最后两项视实际情况而定)
重启从服务器中MYSQL56服务
检查此时data目录下会多出一个文件master.info
检查slave状态:
mysql>start slave;
mysql>show slave statusG
此时对主服务器中数据库进行操作的话会实时同步到从数据库中。
停止备份
mysql>stop slave;