–where=’where_condition’, -w ‘where_condition’ 参数代表仅导出符合条件的数据,比如
–where=”user=’jimf’”
-w”userid>1”
-w”userid<1
–lock-all-tables, -x参数代表在导出过程中对每个数据库的每个表加上一个只读锁
–no-autocommit参数代表对每个表的数据导出内容用set autocommit=0和commit两个语句包围
–single-transaction参数代表将事务隔离级别设置为可重复读并在导出开始时执行start transaction开启一个新的事务,在dump的执行过程中也不会阻止任何的读写操作, 一般都会加上改参数
数据导出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
导出一个数据库: [root@master01 ~]# mysqldump -u root -p -P 3306 --databases course>backup.sql 导出多个数据库: [root@master01 ~]# mysqldump -u root -p -P 3306 --databases course test>course.sql #或则 [root@master01 ~]# mysqldump -u root -p -P 3306 -B course test>course.sql 导出所有数据库: [root@master01 ~]# mysqldump -u root -p -P 3306 --all-databases>course.sql 导出一个数据库的某几个表: [root@master01 ~]# mysqldump -u root -p -P 3306 course students students_myisam>course.sql 仅导出course数据库的数据而不包含表结构: [root@master01 ~]# mysqldump -u root -p -P 3306 --no-create-info course>course.sql 仅导出course数据库中的students和students_myisam两个表的数据: [root@master01 ~]# mysqldump -u root -p -P 3306 --no-create-info course students students_myisam>course.sq 仅导出course数据库的表结构: [root@master01 ~]# mysqldump -u root -p -P 3306 --no-data course>course.sql 导出course数据库中除了teacher和score两个表的其他表结构和数据: [root@master01 ~]# mysqldump -u root -p -P 3306 --ignore-table=course.teacher --ignoretable=course.score course>course.sql 导出course数据库的表和存储过程和触发器: [root@master01 ~]# mysqldump -u root -p -P 3306 --routine --trigger course>course.sql 导出course数据库中符合where条件的数据: [root@master01 ~]# mysqldump -u root -p -P 3306 --where="sid in (1,2)" course students students_myisam>course.sql 远程导出course数据库,导出文件在发起导出命令的服务器上: [root@master02 data]# mysqldump -u root -p -P 3306 -h 10.0.0.201 course > course.sql
关于备份锁表的问题
FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令主要用于备份工具获取一致性备份(数据与binlog位点匹配)。由FTWRL总共需要持有两把全局的MDL锁,并且还需要关闭所有表对象,因此这个命令的杀伤性很大,执行命令时容易导致库hang住
FTWRL主要包括3个步骤:
1.上全局读锁(lock_global_read_lock)
2.清理表缓存(close_cached_tables)
3.上全局COMMIT锁(make_global_read_lock_block_commit)
FTWRL每个操作的影响
上全局读锁会导致所有更新操作都会被堵塞;关闭表过程中,如果有大查询导致关闭表等待,那么所有访问这个表的查询和更新都需要等待;上全局COMMIT锁时,会堵塞活跃事务提交
从主库备份正确方式:
[root@master ~]# mysqldump -u root -p -P 3306 –master-data=2 –single-transaction course >course.sql
此备份方式会在备份开始之初在所有表上加一个只读锁(FLUSH TABLES WITH READ LOCK), 当成功获取了该锁并开始备份之后,此锁就会立即释放。而后续的dump过程中不会影响其他的读写操作
从主库备份如果–dump-slave参数,则备份失败:
[root@master01 ~]# mysqldump -u root -p -P 3306 –dump-slave=2 –single-transaction course >course.sql
Enter password:
mysqldump: Couldn’t execute ‘START SLAVE’: The server is not configured as slave; fix in config file or with CHANGE MASTER TO (1200)
在从库上备份数据:
[root@slave1 course]# mysqldump -u root -p -P 330 –dump-slave –single-transaction test >course.sql
格式如下
第一种mysql
1
SHELL> mysql -u root -p db_name < dbbackup.sql
第二种:
也可以使用source命令导入一个备份文件:
在sql的备份的那里登录
mysql > use dbname;
mysql > use dbbackup.sql;