mysql如何导入数据库
mysql导入数据库,导入80%的数据人第一步就错了。他们习惯打开图形界面,导入点“导入”按钮,数据然后盯着进度条发呆。导入实际上,数据命令行才是导入效率最高的方式,尤其当你面对的数据是几百MB甚至几个GB的SQL文件时。
最基础的导入命令长这样:mysql -u用户名 -p 数据库名 < 文件.sql。回车后输入密码,数据剩下的导入交给机器。这个语法没什么玄机,数据就是导入把SQL文件的内容“喂”给指定的数据库。但很多人栽在细节上——文件路径带空格、数据数据库名写错、导入或者忘了先创建目标库。有一次我帮同事排查,他导了半小时报错,原因仅仅是目标数据库不存在,mysql直接拒绝执行。
如果你要导入的文件很大,比如超过1GB,直接重定向可能让你等到怀疑人生。这时候用source命令更稳:先登录mysql,use 数据库名;,再执行source /绝对路径/文件.sql;。source命令逐条执行SQL,能看到实时进度,中途报错也容易定位。缺点是慢,但至少你知道它在干活,而不是像重定向那样黑屏一片,心里没底。
压缩文件怎么办?别傻乎乎先解压。用管道一步搞定:gunzip < 备份.sql.gz | mysql -u用户名 -p 数据库名。这样省去中间步骤,磁盘IO也少一半。我处理过最极端的情况,一个4.7GB的压缩备份,解压后接近20GB,磁盘差点爆了。用管道方式,硬是在剩余空间不足5GB的情况下导入成功。
还有个坑——字符集。如果你的SQL文件里含中文,导入后乱码,十有八九是字符集不匹配。导入前先确认文件编码,常见的是UTF-8。可以在命令里强制指定:mysql --default-character-set=utf8mb4 -u用户名 -p 数据库名 < 文件.sql。utf8mb4比utf8更全,能存emoji,建议直接用这个。我见过有人用latin1导数据,结果所有中文变成问号,那叫一个惨。
生产环境导入要格外小心。如果你只是往现有库里加几张表,没问题。但如果是覆盖整个库,先备份旧数据。别嫌麻烦,一个mysqldump命令十几秒的事,能救你于水火。具体做法:mysqldump -u用户名 -p 数据库名 > 备份_日期.sql。别问我怎么知道的——有一次我导测试数据,手滑覆盖了线上库,老板站在身后看我恢复数据,那十分钟比一年还长。
最后说个偏方。如果你经常导入相同结构的空库,可以把建表语句和插入数据分开。先导结构,再导数据,这样即使数据文件有问题,至少表还在,排查起来方便。有人觉得多此一举,但真正遇到问题时,你会感谢这个习惯。
工具再多,命令行始终是底线。图形界面适合初学者,但真要处理复杂场景,命令行那几行字比任何按钮都可靠。下次导入前,先想清楚:文件多大?目标库存在吗?字符集对吗?三个问题确认完,基本不会翻车。
