--mysql備份整個資料庫
mysqldump -uroot -p -hcentos7 -P3306 --all-database >all.sql
mysqldump --socket=/var/lib/mysql/mysql.sock -uroot -p --all-database >/tmp/mysql_database_backup.sql
mysqldump -uredmine -predmine1234 redmine >/tmp/mysql_database_backup.sql
mysql -uredmine -predmine1234 --socket=/var/lib/mysql/mysql.sock
--導出指定的庫
mysqldump -uroot -p -hcentos7 -P3306 --database test --fields-terminated-by ',' >test.sql
--導入整個資料庫
mysql -uroot -p test<mysql_database_backup.sql
--恢複到指定的時間段内的資料
mysqlbinlog --stop-date="2015-03-21 17:21:58" /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p123456
mysqlbinlog --start-date="2015-03-21 17:21:03" --stop-date="2015-03-21 17:22:58" /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p123456
--備份表結構,mysqldump預設不導出INFORMATION_SCHEMA or performance_schema資料庫,如果要導出它們需要加上--skip-lock-tables
mysqldump --no-data --databases performance_schema --skip-lock-tables -uroot -p123456 >/tmp/table_ddl.sql
--single-transaction如果是innodb不加鎖啊!相當于對表SELECT,其他會話不能更改表結構,目前隻對事務性的存儲引擎有作用,即INNODB存儲引擎
1.--lock-tables
執行指令
mysqldump -uroot --lock-tables --databases db1 db2 > test.sql
它在導出db1的時候,會對db1所有的表上鎖,導出結束之後釋放鎖.然後再同樣導出db2.
也就是說在db1導出的時候,db2的資料可能還在變化.
其一般用于MYISAM存儲引擎,備份時隻能對資料庫表進行讀取操作,不允許DML
2.--lock-all-tables
mysqldump -uroot --lock-all-tables --databases db1 db2 > test.sql
它會在一開始就對所有的資料庫的所有表上鎖,請注意它會使用FLUSH TABLES
3.--single-transaction
mysqldump -uroot --single-transaction --databases db1 db2 > test.sql
可以看到它設定整個導出的過程為一個事務.避免了鎖,在備份開始前,先執行start transaction
4.--master-data
它對所有資料庫的所有表上了鎖,并且查詢binlog的位置。請注意它會使用FLUSH TABLES
5.--master-data + --single-transaction
mysqldump -uroot --master-data --single-transaction --databases db1 db2 > test.sql
這種組合,會先對所有資料庫的所有表上鎖,讀取binlog的資訊之後就立即釋放鎖,這個過程是十分短暫的。
然後整個導出過程都在一個事務裡.
請注意它會使用FLUSH TABLES