使用perl实现拆分数据表(mysql)并迁移数据实例

作者:junjie 时间:2022-10-07 04:12:20 

随着业务量的增长,可能需要对表进行拆分来提高性能。

下面这个例子是将www.jb51.net的users表拆分成10个表ttlsa_user_0-ttlsa_user_9。

拆分迁移数据程序如下所示:

1.创建ttlsa_user_0-ttlsa_user_9表


#!/usr/bin/perl
###################################
### author: www.jb51.net ###
### QQ群:232608061  ###
### E-mail:service@jb51.net ###
###################################

use DBI;

my $driver=”DBI:mysql”;
my $from_database=”ttlsa”;
my $from_user=”root”;
my $from_password=”123456″;
my $from_host=”localhost”;

$from_dbh=DBI->connect (“$driver:$from_database:$from_host;user=$from_user;password=$from_password”) or die “cannot connect: “. DBI->errstr;

for (0..9) {
$sql=”CREATE TABLE `ttlsa_user_$_` (
`uid` int(10) NOT NULL AUTO_INCREMENT,
`email` varchar(50) NOT NULL,
`passwd` varchar(40) NOT NULL,
`user_name` varchar(20) NOT NULL,
PRIMARY KEY (`uid`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `user_name` (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT”;
$from_dbh->do($sql);
}
$from_dbh->disconnect();

2.迁移数据


#!/usr/bin/perl
###################################
### author: www.jb51.net ###
### QQ群:232608061  ###
### E-mail:service@jb51.net ###
###################################

use DBI;

my $driver=”DBI:mysql”;
my $from_database=”ttlsa”;
my $from_user=”root”;
my $from_password=”123456″;
my $from_host=”localhost”;

$from_dbh=DBI->connect (“$driver:$from_database:$from_host;user=$from_user;password=$from_password”) or die “cannot connect: “. DBI->errstr;
$from_dbh->do(“set names ‘utf8′”);
$from_dbh->do(“set session autocommit=0″);
$from_dbh->do(“set session unique_checks=0″);

$max=600000;
$step=10000;
for ($i=1;$i $step_i=$i+$step;
$sql=”select * from ttlsa_users where user_id>=$i and user_id $sth=$from_dbh->prepare($sql);
$sth->execute;
@value=();
while ($row=$sth->fetchrow_hashref()) {
$uid=$row->{uid};
$email=$row->{email};
$passwd=$row->{passwd};
$user_name=$row->{user_name};
$key=substr($user_id,-1);
$value[$key].=”(‘$uid','$email','$passwd','$user_name'),”;

}
for (0..9) {
chop($value[$_]);
$sql=”insert into ttlsa_user_$_ (`uid`,`email`,`passwd`,`user_name`) values” . $value[$_];
$from_dbh->do(“$sql”);
}
}
$from_dbh->do(“set session autocommit=1″);
$from_dbh->do(“set session unique_checks=1″);
$sth->finish();
$from_dbh->disconnect();

3.附录

如果没有那么多数据量,可以随意插入一些数据进行测试。下面提供一个插入数据的脚本。


#!/usr/bin/perl
###################################
### author: www.jb51.net ###
### QQ群:232608061  ###
### E-mail:service@jb51.net ###
###################################

use DBI;
use Digest::SHA qw(sha1_hex);

my $driver=”DBI:mysql”;
my $from_database=”ttlsa”;
my $from_user=”root”;
my $from_password=”123456″;
my $from_host=”localhost”;

$from_dbh=DBI->connect (“$driver:$from_database:$from_host;user=$from_user;password=$from_password”) or die “cannot connect: “. DBI->errstr;
$from_dbh->do(“set names ‘utf8′”);
$from_dbh->do(“set session autocommit=0″);
$from_dbh->do(“set session unique_checks=0″);

for (1..100000) {
$insert_sql=$from_dbh->prepare(“insert into ttlsa_users (email,passwd,user_name) values (?,?,?)”);
$email=”auto-gre-$_\@jb51.net”;
$data=”auto-gre-$_”;
$passwd=sha1_hex($data);
$user_name=”auto-gre-$_”;
$insert_sql->execute($email,$passwd,$user_name);
}

$from_dbh->do(“set session autocommit=1″);
$from_dbh->do(“set session unique_checks=1″);
$insert_sql->finish();
$from_dbh->disconnect();

标签:perl,拆分数据表,迁移数据
0
投稿

猜你喜欢

  • python实现监控指定进程的cpu和内存使用率

    2023-08-23 02:21:17
  • 详解python之配置日志的几种方式

    2022-11-02 14:32:30
  • IA学习笔记02:组织体系

    2009-06-12 12:22:00
  • Python中使用kitti数据集实现自动驾驶(绘制出所有物体的行驶轨迹)

    2023-06-27 17:02:54
  • 用TensorFlow实现lasso回归和岭回归算法的示例

    2021-09-08 19:48:30
  • 收集的ORACLE函数大全

    2010-07-16 12:58:00
  • Django返回json数据用法示例

    2022-05-25 21:00:52
  • 微信小程序canvas写字板效果及实例

    2024-04-19 09:44:03
  • 使用Python打造一款间谍程序的流程分析

    2021-11-21 08:12:32
  • Python列表常用函数使用详解

    2021-08-21 01:52:05
  • python实现堆栈与队列的方法

    2023-06-19 02:57:04
  • mysql 数据表中查找重复记录

    2024-01-18 14:32:46
  • mysql慢查询优化之从理论和实践说明limit的优点

    2024-01-26 11:59:51
  • python程序 线程队列queue使用方法解析

    2021-11-16 18:43:02
  • HTTP中header头部信息详解

    2023-06-11 23:33:17
  • Python3中常用的处理时间和实现定时任务的方法的介绍

    2022-05-13 09:25:25
  • Vuex的安装、搭建及案例详解

    2024-05-29 22:20:22
  • SQL Server自动生成日期加数字的序列号

    2024-01-12 21:29:42
  • mysql中 datatime与timestamp的区别说明

    2024-01-21 14:45:53
  • mysql数据库索引损坏及修复经验分享

    2024-01-16 11:22:43
  • asp之家 网络编程 m.aspxhome.com