Mysql执行SQL文件的3种方式
Mysql执行SQL文件的3种方式
执行SQL文件的3种方式如下:
1 | mysql -e "source batch-file" |
如果有长的屏幕输出,可以转储到文本或使用more进行查看。
1 | mysql < batch-file | more |
导入速度因素:
innodb_flush_log_at_trx_commit
1 | set GLOBAL innodb_flush_log_at_trx_commit = 0; |
1 默认值,最慢,每次事务提交都要写入log并刷新到磁盘上,这是最保险的方式
0 最快,每隔1S将log刷新到磁盘,但是不保证。事务提交不会触发log写入。很不安全,mysql挂了,那么上一秒的数据就都丢了。
2 折中的一种,事务提交会写入log,但是log刷新还是每秒一次,不保证。这种时候,就算mysql崩了,但是只要操作系统还在运转,数据还是会被写到磁盘上。
sync_binlog = 0
1 | set GLOBAL sync_binlog = 0; |
0 不刷新 binlog,也就是 mysql 只管写数据,至于数据啥时候刷新,由操作系统负责。
1 每1次事务都要强制刷新,写入磁盘,可以看出,这是一种非常保险的方式,但是可想而知,性能会比较差,取决于存储介质的读写速度
N,每 N 次事务强制刷新一次磁盘。设的大一些,可以得到一定的性能提升,但是遇到系统崩溃,会丢失 N 个事务的数据。
另外一些可以设置的地方
innodb_autoextend_increment 表空间自增值
innodb_log_buffer_size log 缓存区大小
innodb_log_file_size binlog 文件大小
bulk_insert_buffer_size 批量写入的数据大小
这些变量全都可以在 mysql 官方的文档里面查到,不同的版本有不同的默认值,最新版本的 mysql,这些变量的默认值已经非常大了,都是几十 MB 级别的,一般不会成为性能瓶颈。
设置2个参数
1 | mysql> set GLOBAL innodb_flush_log_at_trx_commit = 0; |
1 | mysql> set GLOBAL sync_binlog = 0; |
设置完进行导入
The End
评论