手机
当前位置:查字典教程网 >脚本专栏 >perl >使用perl实现拆分数据表(mysql)并迁移数据实例
使用perl实现拆分数据表(mysql)并迁移数据实例
摘要:随着业务量的增长,可能需要对表进行拆分来提高性能。下面这个例子是将www.jb51.net的users表拆分成10个表ttlsa_user_...

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

下面这个例子是将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实现拆分数据表(mysql)并迁移数据实例】相关文章:

Perl实现遍历目录例子

使用perl清理电脑上重复文件实现代码(续)

Perl学习基本备忘录

perl面向对象实例

[Perl]文字/代码批量替换工具

Perl中使用MIME::Lite发送邮件实例

perl 子程序 sub

Perl访问MSSQL并迁移到MySQL数据库脚本实例

Perl split字符串分割函数用法指南

perl实现的两个文件对比并对数据进行筛选的脚本代码

精品推荐
分类导航