Mysql备份锁表

来自linux中国网wiki
跳到导航 跳到搜索

以前老的
导出数据的时候,可以加入mysqldump --skip-lock-table,可以在不锁表的情况导出数据,速度更快一些
InnoDB表格式,默认是会锁表, ORACLE 不会锁表


使用 mysqldump 备份数据库时避免锁表 --single-transaction 一致性备份

-master-data=2            ----如果有写log-bin且版本为5.0以上的版本,则再加上 --master-data=2

在mysqldump过程中,之前其实一直不是很理解为什么加了--single-transaction就能保证innodb的数据是完全一致的,而myisam引擎无法保证,必须加--lock-all-tables,前段时间抽空详细地查看了整个mysqldump过程。
理解master-data和--dump-slave

--master-data=2表示在dump过程中记录主库的binlog和pos点,并在dump文件中注释掉这一行;

--master-data=1表示在dump过程中记录主库的binlog和pos点,并在dump文件中不注释掉这一行,即恢复时会执行;

--dump-slave=2表示在dump过程中,在从库dump,mysqldump进程也要在从库执行,记录当时主库的binlog和pos点,并在dump文件中注释掉这一行;

--dump-slave=1表示在dump过程中,在从库dump,mysqldump进程也要在从库执行,记录当时主库的binlog和pos点,并在dump文件中不注释掉这一行;


mysqldump --opt --default-character-set=utf8 --triggers -R --hex-blob --single-transaction --no-autocommit --master-data=2


tables="Activity RoleText RoleVarChar account co_coins mail role tempData worldSceneCitys"

mysqldump -u root -p'DCwy7gCYL1F' -h 127.0.0.1 --opt --default-character-set=utf8 --triggers -R --hex-blob --single-transaction --no-autocommit --master-data=2  ftsgqxz_12  ${tables[@]} > 1.sql


#对数据表进行过滤操作#
        tables=`mysql -h ${gamedbip} -P${dbport} -u${users} -p${dbpass} $gamedbname -e "show tables" | grep -Ev '^m_|^Tables_in'`;

#从数据库导出到管理机指定目录
        /usr/local/services/mysql/bin/mysqldump -h ${dbip} -P${dbport} -u${users} -p${dbpass} --opt --default-character-set=utf8 --triggers -R --hex-blob --single-transaction --no-autocommit --master-data=2  ${gamedbname} ${tables[@]} > ${backurl}/${gamedbname}/${gamedbname}_${backdatet}.sql;


see also

使用 mysqldump 备份数据库时避免锁表 --single-transaction

MySQL 数据备份与还原

mysqldump的锁表的问题

mysqldump 备份需要锁表