MySQL資料備份

2022-06-20 19:54:13 字數 4025 閱讀 1651

#1. 物理備份: 直接複製資料庫檔案,適用於大型資料庫環境。但不能恢復到異構系統中如windows。

#2. 邏輯備份: 備份的是建表、建庫、插入等操作所執行sql語句,適用於中小型資料庫,效率相對較低。

#語法:

# mysqldump -h 伺服器 -u使用者名稱 -p密碼 資料庫名 > 備份檔案.sql

#示例:

#單庫備份

mysqldump -uroot -p123 db1 > db1.sql

mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql

#多庫備份

mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql

#備份所有庫

mysqldump -uroot -p123 --all-databases > all.sql

#方法一:

[root@egon backup]# mysql -uroot -p123 < /backup/all.sql

#方法二:

mysql> use db1;

mysql> set sql_log_bin=0;

mysql> source /root/db1.sql

#注:如果備份/恢復單個庫時,可以修改sql檔案

drop database if exists school;

create database school;

use school;

#資料庫備份/恢復實驗一:資料庫損壞

備份:1. # mysqldump -uroot -p123 --all-databases > /backup/`date +%f`_all.sql

2. # mysql -uroot -p123 -e 'flush logs' //截斷並產生新的binlog

3. 插入資料 //模擬伺服器正常執行

4. mysql> set sql_log_bin=0; //模擬伺服器損壞

mysql> drop database db;

恢復:1. # mysqlbinlog 最後乙個binlog > /backup/last_bin.log

2. mysql> set sql_log_bin=0;

mysql> source /backup/2014-02-13_all.sql //恢復最近一次完全備份

mysql> source /backup/last_bin.log //恢復最後個binlog檔案

#資料庫備份/恢復實驗二:如果有誤刪除

備份:1. mysqldump -uroot -p123 --all-databases > /backup/`date +%f`_all.sql

2. mysql -uroot -p123 -e 'flush logs' //截斷並產生新的binlog

3. 插入資料 //模擬伺服器正常執行

4. drop table db1.t1 //模擬誤刪除

5. 插入資料 //模擬伺服器正常執行

恢復:1. # mysqlbinlog 最後乙個binlog --stop-position=260 > /tmp/1.sql

# mysqlbinlog 最後乙個binlog --start-position=900 > /tmp/2.sql

2. mysql> set sql_log_bin=0;

mysql> source /backup/2014-02-13_all.sql //恢復最近一次完全備份

mysql> source /tmp/1.log //恢復最後個binlog檔案

mysql> source /tmp/2.log //恢復最後個binlog檔案

注意事項:

1. 完全恢復到乙個乾淨的環境(例如新的資料庫或刪除原有的資料庫)

2. 恢復期間所有sql語句不應該記錄到binlog中

備份計畫:

1. 什麼時間 2:00

2. 對哪些資料庫備份

3. 備份檔案放的位置

備份指令碼:

[root@egon ~]# vim /mysql_back.sql

#!/bin/bash

back_dir=/backup

back_file=`date +%f`_all.sql

user=root

pass=123

if [ ! -d /backup ];then

mkdir -p /backup

fi# 備份並截斷日誌

mysqldump -u$ -p$ --events --all-databases > $/$

mysql -u$ -p$ -e 'flush logs'

# 只保留最近一周的備份

cd $back_dir

find . -mtime +7 -exec rm -rf {} \;

手動測試:

[root@egon ~]# chmod a+x /mysql_back.sql

[root@egon ~]# chattr +i /mysql_back.sql

[root@egon ~]# /mysql_back.sql

配置cron:

[root@egon ~]# crontab -l

2 * * * /mysql_back.sql

select... into outfile 匯出文字檔案

示例:mysql> select * from school.student1

into outfile 'student1.txt'

fields terminated by ',' //定義字段分隔符

optionally enclosed by '」' //定義字串使用什麼符號括起來

lines terminated by '\n' ; //定義換行符

mysql 命令匯出文字檔案

示例:# mysql -u root -p123 -e 'select * from student1.school' > /tmp/student1.txt

# mysql -u root -p123 --xml -e 'select * from student1.school' > /tmp/student1.xml

# mysql -u root -p123 --html -e 'select * from student1.school' > /tmp/student1.html

load data infile 匯入文字檔案

mysql> delete from student1;

mysql> load data infile '/tmp/student1.txt'

into table school.student1

fields terminated by ','

optionally enclosed by '」'

lines terminated by '\n';

#可能會報錯

mysql> select * from db1.emp into outfile 'c:\\db1.emp.txt' fields terminated by ',' lines terminated by '\r\n';

error 1238 (hy000): variable 'secure_file_priv' is a read only variable

在配置檔案中

[mysqld]

secure_file_priv='c:\\' #只能將資料匯出到c:\\下

重啟mysql

重新執行上述語句

務必保證在相同版本之間遷移

# mysqldump -h 源ip -uroot -p123 --databases db1 | mysql -h 目標ip -uroot -p456

mysql 備份源資料 mysql 資料備份與還源

一 資料備份 1 使用mysqldump命令備份 mysqldump命令將資料庫中的資料備份成乙個文字檔案。表的結構和表中的資料將儲存在生成的文字檔案中。mysqldump命令的工作原理很簡單。它先查出需要備份的表的結構,再在文字檔案中生成乙個create語句。然後,將表中的所有記錄轉換成一條ins...

mysql備份資料 mysql 備份資料

1 備份命令 格式 mysqldump h主機名 p埠 u使用者名稱 p密碼 dbname tbname 檔名.sql 如果tbname不填,就是單個資料據的所有表 例如 mysqldump h 192.168.1.100 p 3306 uroot ppassword database cmdb d...

mysql資料備份

mysql教程資料庫教程的備份 匯入 匯出 資料匯入 資料匯出 資料庫和資料表的匯入匯出我們用的是mysqldump 來操作,資料的匯入匯出我們用load data infile 與 load data outfile操作 匯出資料庫方法 引數 mysqldump u使用者名稱 p密碼 資料庫 儲存...