Mysql执行SQL文件的3种方式
LiuSw Lv6

Mysql执行SQL文件的3种方式

执行SQL文件的3种方式如下:

1
2
3
4
5
mysql -e "source batch-file"

mysql -h host -u root -p < batch-file

mysql > source /path/file-name;

如果有长的屏幕输出,可以转储到文本或使用more进行查看。

1
2
3
mysql < batch-file | more

mysql < batch-file > mysql.out

导入速度因素:
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
2
mysql> set GLOBAL innodb_flush_log_at_trx_commit = 0;
Query OK, 0 rows affected (0.00 sec)
1
2
mysql> set GLOBAL sync_binlog = 0;
Query OK, 0 rows affected (0.00 sec)

设置完进行导入

The End

 评论