mysql到底如何备份 mysql数据库如何备份?
\u5982\u4f55\u5907\u4efd\u6574\u4e2amysql\u6570\u636e\u5e93数据备份是数据容灾的最后一道防线,即便有着两地三中心的架构,备份也依然重要。如果备份出问题,备份时影响了交易业务,备份数据无法恢复,这些也是企业难以承受的。所以选择合适的备份工具尤为重要。
每个企业级数据库都会有配套的备份工具,MEB(MySQL Enterprise Backup)就是MySQL企业版中非常重要的工具之一,是为企业级客户提供的数据备份方案。
Xtrabackup一直作为MEB 开源版备胎而存在,从MySQL 8.0开始情况可能会变得有所不同。
在 MySQL 8.0的Backup Lock、Redo Log Archiving、Page Tracking等新特性的加持下,MEB备份/恢复体验会更好,目前xtrabackup还不支持这些特性。
MySQL 企业版还有哪些功能?
特性1:Backup Lock
8.0之前使用xtrabackup或MEB做物理备份,为了保证备份时InnoDB引擎表与其他引擎数据文件、及binlog日志的一致性会上全局读锁,再拷贝非InnoDB文件,这期间MySQL会变成只读,数据无法写入。表数量越多,可能加上时间越长,如果使用的xtrabackup 不小心没加rsync参数,逐个拷贝frm文件,锁定时间会更长,对业务影响较大。
我曾遇到过部署在虚拟机的实例有12000多张表,当时使用的xtrabackup,备份脚本中没加rsync参数,结果锁了十几分钟,而MEB就没有这样的问题。
MySQL 8.0支持轻量级备份锁 LOCK INSTANCE FOR BACKUP,数据字典也重构了由InnoDB存储。若不创建非InnoDB表,MEB默认使用备份锁获取binlog日志一致性位置,并阻止DDL操作,但不影响DML操作。
只有InnoDB表,仅上备份锁
若有非InnoDB表,上全局锁
page-track:利用LSN精确跟踪上次备份之后被修改页面,仅复制这些页面,效率最快。
optimistic:扫描上次备份之后被修改的InnoDB 数据文件中,找出并拷贝修改的页面。依赖系统时间,使用存在限制。
full-scan:扫描所有InnoDB数据文件,找出并拷贝自上次备份之后修改的页面,效率最慢
- mysql> INSTALL COMPONENT "file://component_mysqlbackup";
- SELECT mysqlbackup_page_track_set(true);
- mysqlbackup --incremental-backup-dir=backup_incr --trace=3 --incremental=page-track --incremental-base=history:last_full_backup backup
last_backup:基于前一次备份做增备,前一次备份可能是增备,也可能是全备。这种方式全备之间可能会有多个增备,每次增量可能比较小,但恢复时需要逐个合并。
last_full_backup:基于前一次全备做增备。这种方式增备会越往后体积可能越大,但恢复时只需要合并最后一次增量备份。
dir:基于前一次的备份目录,前一次备份可能是增备,也可能是全备。
page-track 模式 磁盘读写均衡,说明读写的都是修改页面。
full-scan模式 磁盘读写差别很大,说明读了很多未修改的页面。
特性2:Redo Log Archiving
MEB能做到在线热备,备份时不影响数据库读写,这是利用了InnoDB事务日志,在备份期间持续监视redo log的变化,读取增量变化,写入到ibbackup_logfile,也就不需要上锁来保障备份一致性。(对非InnoDB的文件需要上读锁拷贝)
如果备份期间数据库写入负载特别大,而写入ibbackup_logfile速度较慢,redo log size也不大,很可能会出现ibbackup_logfile的写入速度跟不上redo log记录生成速度,redo log 空间不够时需要覆写日志文件,那么来不及写入ibbackup_logfile的记录会丢失,导致备份失败。
MEB 4.1对此做了优化,将redo log处理线程拆分成多线程分工合作,提高处理redo log的效率,降低了redo log覆写造成备份失败的概率,但redo log新增速度和ibbackup_logfile写入速度悬殊太大,问题依然会发生。
MySQL 8.0.17支持了redo log archiving 彻底解决了此问题,备份前设置innodb_redo_log_archive_dirs,指定redo log归档目录。MEB备份时自动开启日志归档,当checkpoint时会将旧记录归档到此目录,后续从归档文件中读取redo日志记录,避免了覆写可能导致的redo记录丢失。
注意:innodb_redo_log_archive_dirs 不能在数据目录下,目录权限要求是700
特性3:Page Tracking
Page Tracking 是为优化增量备份效率,减少不必要的数据页扫描。
增量备份当前有3种扫描模式:
1、利用page-track增量备份,需先安装备份组件
2、在全备前开启page-track
3、全备之后,做增量备份时指定若满足page tracking条件,默认会使用page-track模式,否则会使用full-scan模式,也可以指定--incremental=page-track。
incremental-base有3种选择
测试对比full-scan 和page-track ,在变更页小于总体50%的情况下 ,备份效率至少能有1倍的速度提升。
Mysql数据库备份的方法:
方法一:如果你使用的是虚拟主机,可以用使用phpmyadmin来备份数据库。
1、登陆phpmyadmin。登陆后左边会出现数据库列表,单击要备份的数据库。
2、在弹出的页面中,右侧上部单击“导出”按钮,一般保持默认选项,最下面“另存为文件”,选择“ZIP压缩”,最后单击执行按钮。
3、弹出保存文件后,保存文件即可。
方法二:如果你的数据库可以使用外部链接。可以使用SQLyogEnt来备份。
1、打开SQLyogEnt,并登陆mysql服务器,前面的文章已经讲过,如果还不明白的可以看这里《MySql管理利器SQLyogEnt初识(php建立数据库)》。
2、在左边数据库菜单选择要备份的书库,然后右击它。在弹出的菜单中,选择Backup Database as sql dump。
3、在弹出的对话框中,“export to file”即时备份数据库文件要保存的位置,其他保持默认选项,单击“Export”按钮,开始备份。
4、如果数据库是存放在和程序一台服务器的时候,及数据库地址为localhost的时候,备份mysql数据库一般采用第一种方法,如果你的mysql数据库可以外部登录,就可以使用第二种方式。如果你是独立服务器,可以直接复制数据库源文件即可,这里就不详细讲解了。
注意:
备份时要注意MYSQL数据库的版本和使用的字集,在还原的时候也要对应好,否则会出现乱码或者意想不到的后果。
常用备份工具是mysql自带的mysqldump,
mysqldump -u root -p密码 dbname >d:\test.sql ------------备份某个库
mysqldump -u root -p密码 dbname tablename>d:\test.sql ------------备份某个库下的某个表
mysqldump -u root -p密码 --all-databases >d:\test.sql ------------备份全库
更多参数可通过 在 mysqldump --help查看
备份的应该是数据库。。
绛旓細鏁版嵁搴撴渶鐩存帴鐨澶囦唤鏂规硶灏辨槸浣跨敤鑷甫鐨刴ysqldump鍛戒护杩涜澶囦唤銆1銆 mysqldump鍛戒护澶囦唤鏁版嵁 鍦MySQL涓彁渚涗簡鍛戒护琛屽鍑烘暟鎹簱鏁版嵁浠ュ強鏂囦欢鐨勪竴绉嶆柟渚跨殑宸ュ叿mysqldump,鎴戜滑鍙互閫氳繃鍛戒护琛岀洿鎺ュ疄鐜版暟鎹簱鍐呭鐨勫鍑篸ump,棣栧厛鎴戜滑绠鍗曚簡瑙d竴涓媘ysqldump鍛戒护鐢ㄦ硶:MySQLdump甯哥敤 mysqldump -u root -p --databases 鏁版嵁搴...
绛旓細mysqldump涓MySQL鏈嶅姟鍣ㄥ崗鍚屾搷浣溿傜洿鎺ユ嫹璐濇柟娉曞湪鏈嶅姟鍣ㄥ閮ㄨ繘琛,骞朵笖浣犲繀椤婚噰鍙栨帾鏂戒繚璇佹病鏈夊鎴锋鍦ㄤ慨鏀逛綘灏嗘嫹璐濈殑琛ㄣ傚鏋滀綘鎯崇敤鏂囦欢绯荤粺澶囦唤鏉ュ浠芥暟鎹簱,涔熶細鍙戠敓鍚屾牱鐨勯棶棰:濡傛灉鏁版嵁搴撹〃鍦ㄦ枃浠剁郴缁熷浠借繃绋嬩腑琚慨鏀,杩涘叆澶囦唤鐨勮〃鏂囦欢涓昏涓嶄竴鑷寸殑鐘舵,鑰屽浠ュ悗鐨勬仮澶嶈〃灏嗗け鍘绘剰涔夈傛枃浠剁郴缁熷浠戒笌鐩存帴鎷疯礉鏂囦欢鐨勫尯鍒...
绛旓細澶囦唤鏄鐏剧殑鍩虹锛屾槸鎸囦负闃叉绯荤粺鍑虹幇鎿嶄綔澶辫鎴栫郴缁熸晠闅滃鑷存暟鎹涪澶憋紝鑰屽皢鍏ㄩ儴鎴栭儴鍒嗘暟鎹泦鍚堜粠搴旂敤涓绘満鐨勭‖鐩樻垨闃靛垪澶嶅埗鍒板叾瀹冪殑瀛樺偍浠嬭川鐨勮繃绋嬨傝繖绡囨枃绔犱富瑕佷粙缁嶄簡linux瀹炵幇mysql鏁版嵁搴撴瘡澶╄嚜鍔ㄥ浠藉畾鏃跺浠,闇瑕佺殑鏈嬪弸鍙互鍙傝冧笅 姒傝堪澶囦唤鏄鐏剧殑鍩虹锛屾槸鎸囦负闃叉绯荤粺鍑虹幇鎿嶄綔澶辫鎴栫郴缁熸晠闅滃鑷存暟鎹涪澶...
绛旓細鏈枃閫傜敤鑼冨洿锛氬叏闈㈤槓杩MySQL鏁版嵁搴撶殑鍚勭鎿嶄綔锛屽垎铏氭嫙涓绘満鍜屾湇鍔″櫒涓ょ鎯呭喌銆傝櫄鎷熶富鏈1銆侀氳繃PHPMyAdmin鐨勫鍏ュ鍑哄姛鑳斤紝杩欎釜杞欢涓鑸彧鏀寔鍑犲厗鏁版嵁鐨勫鍑猴紝澶ぇ鐨勬暟鎹彲鑳戒細瓒呮椂銆2銆侀氳繃绋嬪簭鑷甫鐨勬暟鎹簱澶囦唤杩樺師鍔熻兘鏉ユ搷浣滐紝涓浜涘父瑙佺殑PHP绋嬪簭濡侱Z璁哄潧绛夛紝鍚庡彴閮芥湁鏁版嵁搴撹繕鍘熷拰澶囦唤鐨勫姛鑳斤紝鏂逛究鎴戜滑杞Щ绌洪棿...
绛旓細1.1銆 mysqldump鍛戒护澶囦唤鏁版嵁 鍦MySQL涓彁渚涗簡鍛戒护琛屽鍑烘暟鎹簱鏁版嵁浠ュ強鏂囦欢鐨勪竴绉嶆柟渚跨殑宸ュ叿mysqldump,鎴戜滑鍙互閫氳繃鍛戒护琛岀洿鎺ュ疄鐜版暟鎹簱鍐呭鐨勫鍑篸ump,棣栧厛鎴戜滑绠鍗曚簡瑙d竴涓媘ysqldump鍛戒护鐢ㄦ硶:MySQLdump甯哥敤 mysqldump -u root -p --databases 鏁版嵁搴1 鏁版嵁搴2 > xxx.sql 1.2銆 mysqldump甯哥敤鎿嶄綔瀹炰緥 1...
绛旓細1銆佸畬鍏澶囦唤 杩欐槸澶у鏁颁汉甯哥敤鐨勬柟寮忥紝瀹冨彲浠ュ浠芥暣涓暟鎹簱锛屽寘鍚敤鎴疯〃銆佺郴缁熻〃銆佺储寮曘佽鍥惧拰瀛樺偍杩囩▼绛夋墍鏈夋暟鎹簱瀵硅薄銆備絾瀹冮渶瑕佽姳璐规洿澶氱殑鏃堕棿鍜岀┖闂达紝鎵浠ワ紝涓鍛ㄥ仛涓娆″畬鍏ㄥ浠姐2銆佷簨鍔℃棩蹇楀浠 浜嬪姟鏃ュ織鏄竴涓崟鐙殑鏂囦欢锛屽畠璁板綍鏁版嵁搴撶殑鏀瑰彉锛屽浠界殑鏃跺欏彧闇瑕佸鍒惰嚜涓婃澶囦唤浠ユ潵瀵规暟鎹簱鎵鍋氱殑...
绛旓細涓銆MySQL澶囦唤绫诲瀷 1.鐑浠姐佹俯澶囦唤銆佸喎澶囦唤 锛堟牴鎹湇鍔″櫒鐘舵侊級鐑浠斤細璇汇佸啓涓嶅彈褰卞搷锛涙俯澶囦唤锛氫粎鍙互鎵ц璇绘搷浣滐紱鍐峰浠斤細绂荤嚎澶囦唤锛涜銆佸啓鎿嶄綔鍧囦腑姝紱2.鐗╃悊澶囦唤涓庨昏緫澶囦唤 锛堜粠瀵硅薄鏉ュ垎锛夌墿鐞嗗浠斤細澶嶅埗鏁版嵁鏂囦欢锛涢昏緫澶囦唤锛氬皢鏁版嵁瀵煎嚭鑷虫枃鏈枃浠朵腑锛3.瀹屽叏澶囦唤銆佸閲忓浠姐佸樊寮傚浠 锛堜粠鏁版嵁...
绛旓細鎵惧埌鏈嶅姟鍣ㄤ笂mysql鐨鏁版嵁搴撳瓨鏀捐矾寰勪笅闈㈢殑鏁版嵁搴撳悕鏂囦欢锛屾嫹璐濊繃鍘绘斁鍒版柊鏈嶅姟鍣ㄧ殑瀵瑰簲璺緞涓嬪氨鍙互浜 姣斿浣犺澶囦唤test鐨勬暟鎹簱锛屽氨鍒颁綘鐨刴ysql瀹夎鐩綍D:MySQLdata涓嬮潰鎶妕est杩欎釜鏂囦欢澶规暣涓鍒惰蛋灏卞彲浠ヤ簡
绛旓細澶囦唤鏁版嵁搴 浣跨敤mysqldump鍛戒护澶囦唤鏁版嵁搴 杩樺師鏁版嵁搴 1銆佷娇鐢mysql鍛戒护杩樺師鏁版嵁搴 灏唃ame_backup.sql 杩樺師鑷 game 鏁版嵁搴擄細2銆佷娇鐢╯ource鍛戒护杩樺師鏁版嵁搴 濡傛灉鏁版嵁搴撹繃澶э紝寤鸿鍙互浣跨敤source鍛戒护
绛旓細涓銆乄in32绯荤粺涓MySQL鐨勫浠杩樺師鏂规硶 澶囦唤锛氬湪鈥滆繍琛屸濅腑杈撳叆鈥渃md 鈥濓紝鍒╃敤鈥渃d /Program Files/MySQL/MySQL Server 5.0/bin鈥濊繘鍏in鏂囦欢澶癸紝杈撳叆鈥渕ysqldump -u 鐢ㄦ埛鍚 -p databasename >exportfilename鈥濆鍑烘暟鎹簱鍒版枃浠讹紝濡俶ysqldump -u root -p voice>voice.sql锛岀劧鍚庤緭鍏ュ瘑鐮佸嵆鍙紑濮嬪鍑...