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

所属分类: 脚本专栏 / perl 阅读数: 712
收藏 0 赞 0 分享

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

下面这个例子是将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操作MongoDB报错undefined symbol: HeUTF8解决方法

这篇文章主要介绍了perl操作MongoDB报错undefined symbol: HeUTF8解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

cpanm安装及Perl模块安装教程

这篇文章主要介绍了cpanm安装及安装Perl模块教程,本文先是给出了cpanm的安装教程,同时给出了Perl模块的安装实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Windows和Linux系统下perl连接SQL Server数据库的方法

这篇文章主要介绍了Windows和Linux系统下perl连接SQL Server数据库的方法,本文详细的讲解了Windows和Linux系统中perl如何连接Microsoft SQL Server数据库,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl脚本实现检测主机心跳信号功能

这篇文章主要介绍了Perl脚本实现检测主机心跳信号功能,本文代码也可作为perl串口通信的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl中使用File::Lockfile确保脚本单实例运行

这篇文章主要介绍了Perl中使用File::Lockfile确保脚本单实例运行的方法,本文直接给出实例,方法非常简单,需要的朋友可以参考下
收藏 0 赞 0 分享

7个perl数组高级操作技巧分享

这篇文章主要介绍了7个perl数组高级操作技巧,本文讲解了数组去重、数组合并、查找最大值、列表归并等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

perl面向对象实例

这篇文章主要介绍了perl面向对象实例,本文讲解了一个类只是一个简单的包、对象仅仅只是引用、一个方法就是一个简单的子程序等内容,并给出了一个简单示例,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl eval函数使用实例

这篇文章主要介绍了Perl eval函数使用实例,本文讲解了eval 函数的两种使用方式,并给出3个使用实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl函数(子程序)学习笔记

这篇文章主要介绍了Perl函数(子程序)学习笔记,本文讲解了函数定义、函数返回值、函数参数传递等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl中的控制结构学习笔记

这篇文章主要介绍了Perl中的控制结构学习笔记,本文讲解了条件语句if、条件语句unless、循环语句while、循环语句until、for循环、foreach语句、循环控制等内容,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多