第一种:单向主从热备
mysql主从热备有2种配置方式,备份某些库或者忽略备份某些库,建议选择后者
master机器
以下是代码片段: vi my.cnf,添加下面的 log-bin server-id = 1 #sql-bin-update-same binlog-do-db=mysql //备份的数据库名,可以添加多个或者 |
slave机器
以下是代码片段: log-bin server-id = 2 #sql-bin-update-same master-host=192.168.8.201 master-user=backup master-password=123456 master-port=3306 master-connect-retry=10 replicate-do-db=mysql #log-slave-updates |
或者
master机器
以下是代码片段: server-id = 1 expire-logs-days = 7 binlog-ignore-db=test |
slave机器
以下是代码片段: server-id = 2 master-host=192.168.8.201 master-user=backup master-password=123456 master-port=3306 master-connect-retry=10 expire-logs-days = 7 replicate-ignore-db=test |
在master机器上面授权:
以下是代码片段: mysql>GRANT all ON *.* TO backup@192.168.8.202 IDENTIFIED BY "123456"; |
到此为止配置完成了(第一次配置需要重启mysql),剩下的工作就是再主从热备开始前保持主从的数据完全一致:
对于myisam的表,直接把master机器mysql/data目录下面的所有文件同步到slave机器对应的目录即可
对应innodb的表,不能直接同步文件,需要用mysqldump导出数据,然后在slave机器上面导入即可
注意在同步数据期间,master机器锁表成只读模式:
以下是代码片段: mysql>flush tables with read lock; |
这期间主从mysql都可以不停,数据同步完毕之后,再master机器上查看mysqlbinglog和偏移量,例如:
以下是代码片段: mysql> show master status; +---------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------------+----------+--------------+------------------+ | mysql-bin.000012 | 4117873 | | test | +---------------------+----------+--------------+------------------+ |
然后在slave机器上面修改成对应的日志文件和偏移量即可:
以下是代码片段: mysql>slave stop; mysql> CHANGE MASTER TO -> MASTER_LOG_FILE=’mysql-bin.000012’, -> MASTER_LOG_POS=4117873; mysql>slave start; |
最后master解锁:
以下是代码片段: mysql> unlock tables; |
至此mysql主从热备就可以正常工作了.
还有一种简单的方法,但是必须要停止mysql:
删除master机器下面的所有日志文件,删除slave机器的所有日志文件和relay-log.info及master.info
然后同步数据保持主从数据一致,最后先启动slave的mysql后启动master的mysql即可.
附录:
关于innodb的独享表空间存储(解决ibdata1超大的问题)
配置my.cnf
加入 innodb_file_per_table
以下是代码片段: [mysqld] innodb_file_per_table |
InnoDB管理数据库文件的方式比较独特,它使用 tablespace 来管理数据文件。当使用 Per-Table Tablespaces,也就是每个InnoDB表都使用单独的tablespace时,数据文件的管理方式和MyISAM类型的表差不多,在这种情况下,每个数据库表都对应到一个数据文件,当分表比较多时,数据库文件也会比较多;相反,当没有启用Per-Table Tablespaces,则所有的InnoDB表的数据存在同一个tablespace中,tablespace对应到一系列的数据文件,此时,我们必须指定数据库文件的路径和大小,仅有最后一个文件可以是自动扩展的,其它的必须是固定大小(比如2G)。由于InnoDB的数据文件只会增长不会收缩(即使删除数据或者drop表),所以当前面指定的固定大小的文件写满了之后,最后一个自动扩展的文件就会一直增长而导致一个超大的文件的出现,这对于有最大文件限制的系统上就会导致问题。
我同时了遇到磁盘分区写满和最后一个数据文件超大的问题,根据MySQL手册中对InnoDB数据文件维护的说明:
1. 对于最后一个文件超大的问题,可以计算出最后一个文件的大小(按M计算的大小取整,即字节数除以1024^2),然后修改配置,把最后一个文件大小设置为该值,然后在其后继续追加新的数据文件。
2. 对于磁盘写满的问题,可以把新的数据文件配置到其它分区,或者把以后的文件mv到其它分区,在配置文件中写数据文件的全路径
由于配置文件中指定的数据文件的大小和数据文件每次增长的大小都以M来指定,所以最后一个文件按M计算应该得到一个整数,一般不存在小数舍入取整的问题。
转移数据文件到其他分区应该用mv而不是cp,因为mv不会改变数据文件的创建时间,MySQL在启动时会比对log文件和数据文件的时间戳,如果两者不一致,则会启动失败。
相关配置选项
1. 使用Per-table tablespace
以下是代码片段: [mysqld] innodb_file_per_table |
2. 配置数据文件到不同分区
以下是代码片段: innodb_data_home_dir = / innodb_data_file_path = data1/ibdata1:10M;data2/ibdata2:10M:autoextend |
第二种:双向主从热备
环境:
Master server: 10.224.194.239
Slave server: 10.224.194.237
步骤:
1.分别在Master/Slaver mysql db 创建backup user:
GRANT FILE ON *.* TO backup@10.224.194.239 IDENTIFIED BY 'pass';
GRANT REPLICATION SLAVE ON *.* TO backup@10.224.194.239 IDENTIFIED BY 'pass';
GRANT FILE ON *.* TO backup@10.224.194.237 IDENTIFIED BY 'pass';
GRANT REPLICATION SLAVE ON *.* TO backup@10.224.194.237 IDENTIFIED BY 'pass';
2.在Master server配置/etc/my.cf 文件:
log-bin
server-id = 1
binlog-do-db=test
binlog-ignore-db = mysql
//只保存7天的log-bin日志
expire-logs-days = 7
replicate-do-db=test
replicate-ignore-db = mysql
master-host=10.224.194.237
master-user=backup
master-password=pass
master-port=3306
master-connect-retry=60
slave-skip-errors=all
3.在Master server配置/etc/my.cf 文件:
log-bin
server-id = 2
//只保存7天的log-bin日志
expire-logs-days = 7
binlog-do-db=test
binlog-ignore-db = mysql
replicate-do-db=test
replicate-ignore-db = mysql
master-host=10.224.194.239
master-user=backup
master-password=pass
master-port=3306
master-connect-retry=60
slave-skip-errors=all
4.重启mysql数据库,验证命令如下:
查看Master状态
show master status;
mysql> show master status;
+-----------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+--------------+------------------+
| mysqllog.000003 | 301 | test | mysql |
+-----------------+----------+--------------+------------------+
1 row in set (0.00 sec)
查看Slave状态
show slave status \G;
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Reconnecting after a failed master event read
Master_Host: 10.224.194.239
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqllog.000003
Read_Master_Log_Pos: 301
Relay_Log_File: mysqlgsb-relay-bin.000082
Relay_Log_Pos: 348
Relay_Master_Log_File: mysqllog.000003
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 301
Relay_Log_Space: 650
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
ERROR:
No query specified
查看同步进程:
mysql> show processlist \G;
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 4186
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 3745
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
*************************** 3. row ***************************
Id: 5
User: root
Host: mysqlpri.webex.com:28293
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 4. row ***************************
Id: 6
User: backup
Host: 10.224.194.237:41729
db: NULL
Command: Binlog Dump
Time: 135
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
4 rows in set (0.00 sec)
ERROR:
No query specified
PS:
一般备份只需要单向热备,请看下面这篇文章:
另外转一篇文章:http://blog.csdn.net/babydavic/article/details/8432120
http://blog.csdn.net/mackzhaozhonggang/article/details/6718831
以下是Mysql同步出错解决方法
一、主从不同步
mysql> show slave status;
报错:Error xxx dosn't exist
且show slave status\G:
Slave_SQL_Running: NO
Seconds_Behind_Master: NULL
解决办法一
1、首先停掉Slave服务:
mysql> SLAVE STOP;
2、到主服务器上查看主机状态:记录File和Position对应的值:
mysql> SHOW MASTER STATUS;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| updatelog.000001 | 215 +------------------+-----------+--------------+------------------+
3、到slave服务器上执行手动同步:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_PORT=3306
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
mysql> SLAVE START;
// 再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
问题解决!
解决办法二
1、首先停掉Slave服务:
mysql> SLAVE STOP;
2、从主服务器中跳过后面的n个事件。要复原由语句导致的复制中止,这是有用的。仅当从属
线程没有正在运行时,本语句时有效的。否则,会产生一个错误。
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
3、恢复Slave服务:
mysql> SLAVE START;
注意: 方法一是强制性从某一个点开始同步,会有部分没有同步的数据丢失,后续主服务器上删
除记录同步也会有一些错误信息,不会影响使用. 方法二不一定会有效果.
// 还需要做的一些优化与监视:
show full processlist; # 查看mysql当前同步线程号
skip-name-resolve # 跳过dns名称查询,有助于加快连接及同步的速度
max_connections=1000 # 增大Mysql的连接数目,(默认100)
max_connect_errors=100 # 增大Mysql的错误连接数目,(默认10)
二、SLAVE启动问题
由于一些错误操作导致 CHANGE MASTER 和SLAVE 服务无法启动,系统报错如下:
*****************************************************************
Could not initialize master info structure; more error messages can be found in the MySQL
error log.
*****************************************************************
无法初始化master info结构,MySQL错误日志记录了更详细的错误信息。
解决方法:
1、查看MySQL错误日志,如:同步的上一个Position是多少,很多情况下无法启动服务是由于
mysql识别的同步始终停留在上一个Position上。
2、查看master.info和relay-log.info,master.info 记录MASTER相关信息,relay-log.info
记录当前同步日志信息。
3、停止myslq服务,删除master.info和relay-log.info。
4、启动mysql服务。
5、重新CHANGE MASTER,重新启动SLAVE服务。
或者最简单的方式:
mysql> slave stop; mysql> reset slave; mysql> CHANGE MASTER TO -> MASTER_LOG_FILE=’mysql-bin.000012’, -> MASTER_LOG_POS=4117873; mysql> slave start;
最后贴个主数据库宕机后怎么处理的文章:
相关推荐
在提供的"数据库同步热备方案建议书”中,可能会详细阐述这些技术的选择、实施方案的步骤、预期的效果以及应对不同故障场景的策略。阅读这份文档将有助于深入理解如何为某区政府构建一个高效、可靠的数据库同步热备...
Mysql 数据库双机热备的配置.ysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中。实现mysql...
Oracle数据库双机热备方案 Oracle 双机热备方案是指运用适当的拓扑结构将两台数据库连接起来,以主-从的方式实现数据库热备份。该方案可以避免由数据库崩溃而给前端服务造成损失。 一、数据库双机热备的概念和...
总结,MySQL的双机热备和主从热备是提高数据库可靠性和性能的重要手段,通过配置和管理,可以在不影响业务的情况下实现数据的实时同步和故障恢复。在Windows环境中实施这些策略时,需要注意兼容性和系统差异,确保...
MySQL是开源的数据库,现在的应用也比较多。...对于MySQL数据库来说,一般应用于中小规模的应用,不太可能投入巨大的成本去采购双机热备的产品。本文档详细解决了在不增加成本的条件下如何解决MySQL数据库的双机热备。
这是一款很方便的数据库同步软件,WINDOWS版本,只要安装了ORACLE客户端即可使用,目前只支持ORACLE9i/10g,另外不支持DDL语句
因此,他们可能会选择采用如Oracle Data Guard、MySQL Replication或者SQL Server Always On Availability Groups等高级数据库同步技术来实现热备。 "数据库同步热备方案建议书(某电力设计院).pdf"可能包含以下...
数据库同步热备是确保业务连续性和数据安全性的重要策略,尤其对于关键领域如医疗系统的HIS(Hospital Information System,医院信息系统)来说更为重要。本方案针对武汉某医院的HIS系统,旨在提供一种实时或近乎...
MySQL数据库双机热备服务器配置是一项关键任务,用于确保数据的高可用性和连续性。这种配置通常涉及到两台服务器,它们共享同一份数据库,并通过心跳机制监控彼此的状态,以实现故障切换。以下是对整个配置过程的...
文件名“数据库同步热备方案建议书(上海某保险公司).pdf”表明这份文档详细阐述了针对该保险公司的具体实施方案,可能包括了选择的同步工具、架构设计、故障切换流程以及性能和安全性评估等内容。 在实际操作中,...
### MySQL 数据库双机热备实现详解 #### 一、双机热备概念与意义 在现代企业级应用中,数据库作为数据存储的核心组件,其稳定性和可用性至关重要。一旦数据库发生故障,可能会导致业务中断甚至数据丢失。为了提高...
MySQL数据库双机热备是一种高可用性和容灾恢复策略,旨在确保在一台服务器出现故障时,另一台服务器能够无缝接管工作,保持业务连续性。在互联网行业中,由于数据的重要性,MySQL数据库的双机热备配置是常见的做法。...
本文将深入探讨数据库同步和热备的基本概念、技术实现以及实施方案。 数据库同步是指在主数据库发生数据变更时,能够实时或定时将这些变化复制到备份数据库的过程。这样做的主要目的是为了数据冗余和故障恢复,避免...
在IT行业中,数据库同步热备是一项至关重要的任务,特别是在大型石化等关键业务领域。数据库热备是为了确保在主数据库出现故障时,系统可以迅速切换到备份数据库,保证业务连续性和数据完整性。本方案针对上海某石化...
数据库同步热备解决方案是保障数据安全和业务连续性的重要策略,尤其在大型机构如某大学图书馆这样的信息密集型环境中更是必不可少。这篇博文及其配套的PDF文档可能详细阐述了如何为图书馆的数据库系统建立一个高效...
MySQL 双机热备同步是指两个 MySQL 服务器之间的实时数据同步,通过配置主从关系和双向同步机制,实现数据的实时备份和热备。下面将详细介绍 MySQL 双机热备同步的配置步骤和原理。 主从关系同步 在 MySQL 中,...
财务数据是每个铁路局独立的,票务则是集中的 博文链接:https://woxintech2011.iteye.com/blog/1568215
### 基于Oracle高级复制实现数据库同步热备的关键知识点 #### 一、基本概念解析 1. **主站点(Master Site)**:提供数据源的站点,在本例中即为ORACLE数据库站点。 2. **实体化视图站点(Materialized View Site...