Linux平台,使用bash脚本批量修改 MySQL 数据库的schema及迁移table

话不多说,直接上脚本。

#!/bin/bash
new_database="new_db"
ori_database="origin_db"
database_password="newpass"

mysql -uroot -p$database_password -e "create database if not exists $new_database"
list_table=$(mysql -uroot -p$database_password -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='$ori_database'")
for table in $list_table
do
	mysql -uroot -p$database_password -e "rename table $ori_database.$table to $new_database.$table"
done
### 处理大规模文件并将其插入数据库的最佳实践 #### 使用适当方法读取大文件 对于大型文件,逐行读取而非一次性加载整个文件可以显著提高内存效率。这可以通过 `readline()` 方法实现[^2]: ```bash #!/bin/bash input_file="large_data.csv" output_db="database_name" while IFS= read -r line; do # 对每一行执行操作,比如解析CSV字段 field1=$(echo $line | cut -d',' -f1) field2=$(echo $line | cut -d',' -f2) # 插入到MySQL数据库mysql -u username -ppassword ${output_db} << EOF INSERT INTO table_name (column1, column2) VALUES ('${field1}', '${field2}'); EOF done < "${input_file}" ``` 这种方法避免了一次性占用大量内存来存储整个文件的内容。 #### 利用批处理提升性能 为了进一步优化性能,建议采用批量插入的方式而不是单条记录逐一插入。这样能够减少网络往返次数以及事务开销。下面是一个改进后的版本,它收集多行数据形成批次后再提交给数据库: ```bash #!/bin/bash batch_size=1000 counter=0 insert_query="" table="your_table" db_user="username" db_password="password" db_name="database_name" file_path="/path/to/large/file.csv" # 开始构建SQL语句头部 sql_head="INSERT INTO ${table} (col1, col2) VALUES " IFS=$'\n' for row in $(cat "$file_path"); do value_part="('${row//,/\'},')" if [[ $counter -eq 0 ]]; then insert_query="${sql_head}${value_part}" elif (( counter % batch_size != 0 )); then insert_query="${insert_query},${value_part}" else echo "Executing batch..." # 执行当前累积的查询字符串 mysql -u"${db_user}" "-p${db_password}" "${db_name}" <<< "${insert_query};" # 准备下一个批次 insert_query="${sql_head}${value_part}" fi let counter++ done if [[ ! -u"${db_user}" "-p${db_password}" "${db_name}" <<< "${insert_query};" fi ``` 此脚本会每达到指定数量(`$batch_size`)就向数据库发送一次请求,从而提高了整体导入速度。 #### 并行化加速数据迁移过程 当面对极其庞大的数据集时,还可以考虑利用MySQL Shell提供的`util.importTable()`工具来进行并发表级导入作业。这种方式允许同时从多个线程写入目标表格,极大地加快了大数据量场景下的传输速率[^1]: ```python import mysqlsh session = mysqlsh.mysql.get_session({ 'host': 'localhost', 'port': 3306, 'user': 'root', 'password': '' }) schema = session.get_schema('test') table = schema.create_table('new_table') options = { 'threads': 8, # 设置并发度 } mysqlsh.util.import_table( './data.csv', target_table='new_table', options=options ) ``` 上述Python代码片段展示了如何配置并启动一个具有八个工作线程的任务来高效地完成大批量数据的上传任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

招财猫_Martin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值