天天看點

mysql的備份與恢複

[root@zhangmengjunlinux ~]# mysqldump -uroot -pmenglei discuz

這個是檢視discuz庫備份出來的庫的指令,mysqldump 備份的工具,備份資料庫,格式和mysql登陸是一樣的

[root@zhangmengjunlinux ~]# mysqldump -uroot -pmenglei discuz > /data/discuz.sql

重并向到一個檔案裡去,實際上他備份的是可讀的并不是二進制的

[root@zhangmengjunlinux ~]# vim !$

vim /data/discuz.sql

這個就是備份出來的discuz.sql

mysql的備份與恢複

備份出來的檔案有規律,可以通過這個檔案恢複整個庫,它是一個表一個表的備份的,我們可以找一下發文章的post相關的 pre_from_post,那麼現在假如我不小心把這個表給删了,這個表具體的檔案在哪呢?

[root@zhangmengjunlinux ~]# cd /data/mysql

[root@zhangmengjunlinux mysql]# ls

discuz       mysql             mysql-bin.000004  mysql-bin.000008  mysql-bin.000012  mysql-bin.000016  mysql-bin.000020  zhangmengjunlinux.com.err

ibdata1      mysql-bin.000001  mysql-bin.000005  mysql-bin.000009  mysql-bin.000013  mysql-bin.000017  mysql-bin.000021  zhangmengjunlinux.com.pid

ib_logfile0  mysql-bin.000002  mysql-bin.000006  mysql-bin.000010  mysql-bin.000014  mysql-bin.000018  mysql-bin.index

ib_logfile1  mysql-bin.000003  mysql-bin.000007  mysql-bin.000011  mysql-bin.000015  mysql-bin.000019  test

[root@zhangmengjunlinux mysql]# cd discuz

[root@zhangmengjunlinux discuz]# ls

db.opt                                 pre_common_plugin.MYI               pre_forum_groupuser.MYI            pre_home_feed_app.MYI

pre_common_admincp_cmenu.frm           pre_common_pluginvar.frm            pre_forum_hotreply_member.frm      pre_home_feed.frm

pre_common_admincp_cmenu.MYD           pre_common_pluginvar.MYD            pre_forum_hotreply_member.MYD      pre_home_feed.MYD

pre_common_admincp_cmenu.MYI           pre_common_pluginvar.MYI            pre_forum_hotreply_member.MYI     pre_home_feed.MYI

pre_common_admincp_group.frm           pre_common_process.frm              pre_forum_hotreply_number.frm      pre_home_follow_feed_archiver.frm

pre_common_admincp_group.MYD           pre_common_regip.frm                pre_forum_hotreply_number.MYD      pre_home_follow_feed_archiver.MYD

庫和表都是單個一個一個的檔案,那麼每個表都有三個不同的字尾名frm、MYD、 MYI

[root@zhangmengjunlinux discuz]# rm -rf pre_form_post*

我們不小心把post表給它删了,重新開機mysql

#/etc/init.d/mysqld restart

恢複備份 反向重并向

[root@zhangmengjunlinux discuz]# mysql -uroot -pmenglei discuz < /data/discuz.sql

單獨備份一個表

[root@zhangmengjunlinux discuz]# mysqldump -uroot -pmenglei discuz pre_forum_post > /data/post.sql

那麼恢複的時候怎麼去恢複呢

[root@zhangmengjunlinux discuz]# mysql -uroot -pmenglei discuz  < /data/post.sql

備份的時候加表名,恢複的時候不需要加表名了,隻需要跟庫名

在備份的時候沒有指定字元集,恢複的時候字元集跟備份之前的字元集不一緻,最終導緻恢複完了資料他是亂碼,這種情況很有可能發生,我們要備份的指定一個字元集

[root@zhangmengjunlinux discuz]# mysqldump -uroot --default-character-set=gbk -pmenglei discuz per_forum_post > /data/post.sql

恢複的指令

[root@zhangmengjunlinux discuz]# mysql -uroot --default-character-set=gbk -pmenglei discuz  < /data/post.sql

繼續閱讀