--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
--single-transaction如果是innodb不加锁啊!相当于对表SELECT,其他会话不能更改表结构,目前只对事务性的存储引擎有作用,即INNODB存储引擎
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