mongo数据多进程导入mysql数据库(YII2实现)
<?php/** * Created by PhpStorm. * User: huanghe * Date: 2016/2/29 * Time: 14:24 */namespace consolecontrollers;use yiiconsoleController;use Yii;use yiimongodbQuery;/** * command controller */class ToolsController extends Controller { /* * mongo数据导入mysql * php G:/wamp/www/office/yii tools/mongo-to-mysql mall 1 * php G:/wamp/www/office/yii tools/mongo-to-mysql mall 2 * php G:/wamp/www/office/yii tools/mongo-to-mysql mall 3 * php G:/wamp/www/office/yii tools/mongo-to-mysql mall 4 * php G:/wamp/www/office/yii tools/mongo-to-mysql mall 5 * php G:/wamp/www/office/yii tools/mongo-to-mysql mall 6 * php G:/wamp/www/office/yii tools/mongo-to-mysql analytics */ public function actionMongoToMysql($dbName, $mongoTablesImport=0) { if($dbName == ‘mall‘){ $malldb = Yii::$app->get(‘malldb‘); if($mongoTablesImport == 1){ $mongoTables = [ ‘goods‘, ‘goods_analysis‘, ‘goods_attribute‘, ‘goods_class‘, ‘goods_class_ad‘, ‘goods_class_ad_list‘, ‘goods_combination‘, ‘goods_comment‘, ‘goods_group_list‘, ‘goods_group_sub‘, ‘goods_local_price‘, ‘goods_package‘, ‘goods_picture‘, ‘goods_province_price‘, ‘goods_type‘, ‘mall‘, ‘notice‘, ‘notice_list‘, ‘order‘, ‘order_goods‘, ‘payment‘, ‘receiving‘, ‘reduction‘, ‘relation‘, ‘voucher‘, ]; }else if($mongoTablesImport == 2){ $mongoTables = [ ‘order_record‘, ‘ordergoods‘, ‘order_goods_record‘, ‘ordergoodsrecord‘, ‘voucher_list_record‘, ]; }else if(in_array($mongoTablesImport, [3,4,5,6])){ $mongoTables = [ ‘voucher_list‘, ]; }else if($mongoTablesImport == 7){ $mongoTables = [ ‘stock‘, ]; }else{ die(‘mongoTablesImport error‘); } }else if($dbName == ‘analytics‘){ $malldb = Yii::$app->get(‘analyticsdb‘); $mongoTables = [ ‘goods_comment‘, ‘goods_sales‘, ‘goods_sales_day‘, ]; }else{ die(‘dbName error‘); } foreach($mongoTables as $mongoTable){ if(($dbName == ‘analytics‘) || in_array($mongoTable, [‘ordergoods‘, ‘ordergoodsrecord‘])){ $mongoTableName = $mongoTable; }else{ $mongoTableName = $dbName.‘.‘.$mongoTable; } $mysqlTableName = $dbName.‘_‘.$mongoTable; echo $mysqlTableName.‘ process is beginning.‘.PHP_EOL; $start = 0; $len = 100; $query = new Query; if($mongoTablesImport == 3){ //$total = $query->from($mongoTableName)->where([‘in‘, ‘state‘, [‘2‘, ‘3‘]])->count(‘*‘, $malldb);echo $total;exit; $list = $query->from($mongoTableName)->where([‘in‘, ‘state‘, [‘2‘, ‘3‘]])->offset($start)->limit($len)->all($malldb); }else if($mongoTablesImport == 4){ //$total = $query->from($mongoTableName)->where([‘state‘ => ‘1‘])->andWhere([‘voucher_id‘ =>new MongoId(‘564adcff08bd711d7d50c1e5‘)])->count(‘*‘, $malldb);echo $total;exit; $list = $query->from($mongoTableName)->where([‘state‘ => ‘1‘])->andWhere([‘voucher_id‘ => new MongoId(‘564adcff08bd711d7d50c1e5‘)])->offset($start)->limit($len)->all($malldb); }else if($mongoTablesImport == 5){ $list = $query->from($mongoTableName)->where([‘state‘ => ‘1‘])->andWhere([‘voucher_id‘ => new MongoId(‘55e18fa408bd71072c8c017e‘)])->offset($start)->limit($len)->all($malldb); }else if($mongoTablesImport == 6){ $voucherMongoIdArr = [ new MongoId(‘56d94b94ed9b245bf517aa21‘), new MongoId(‘55f68bf708bd7144be9467f5‘), new MongoId(‘55fa80c208bd7144c0948f0c‘), new MongoId(‘55de7fc808bd717342242ac4‘), new MongoId(‘55de7f4908bd71734223fbe3‘), new MongoId(‘5695c3d3ed9b2464dbc52908‘), new MongoId(‘56c5a533ed9b247c5d352649‘), new MongoId(‘56c6ca7fed9b247c5d352a43‘)]; $list = $query->from($mongoTableName)->where([‘state‘ => ‘1‘])->andWhere([‘in‘, ‘voucher_id‘, $voucherMongoIdArr])->offset($start)->limit($len)->all($malldb); }else{ $list = $query->from($mongoTableName)->offset($start)->limit($len)->all($malldb); } while(!empty($list) && is_array($list)) { foreach ($list as $each) { // commonwidgetsTools::P($each);exit; $mysqlData = []; foreach($each as $mongoKey=>$mongoVal){ if($mongoKey == ‘_id‘){ $mongoKey = ‘mongo_id‘; } if(is_object($mongoVal) && get_class($mongoVal)==‘MongoDate‘){ $mongoVal = $mongoVal->toDateTime()->format(‘Y-m-d H:i:s‘); } if(is_array($mongoVal)){ $mongoVal = json_encode($mongoVal); } $mongoVal = (string)$mongoVal; if($mongoVal === ‘‘){ continue; } if(($mongoTableName == $dbName.‘.payment‘) && ($mongoKey == ‘notify_time‘)){// if(!preg_match("/^d{4}-d{2}-d{2} d{2}:d{2}:d{2}$/s",$mongoVal)) {// continue;// } if($mongoVal == ‘-- ::‘){ continue; } } if(($mongoTableName == $dbName.‘.receiving‘) && ($mongoKey == ‘Fixed‘)){ $mongoKey = ‘fix_phone‘; } $mysqlData[$mongoKey] = $mongoVal; } //commonwidgetsTools::P($mysqlData);exit; $mysqldb = $dbName.‘Mysql‘; $exist = Yii::$app->$mysqldb->createCommand(‘SELECT mongo_id FROM ‘.$mysqlTableName.‘ WHERE mongo_id="‘.$mysqlData[‘mongo_id‘].‘"‘)->queryOne(); try { if(empty($exist)){ Yii::$app->$mysqldb->createCommand()->insert($mysqlTableName, $mysqlData)->execute(); }else{ Yii::$app->$mysqldb->createCommand()->update($mysqlTableName, $mysqlData, ‘mongo_id="‘.$mysqlData[‘mongo_id‘].‘"‘)->execute(); } } catch (Exception $e) { echo $e->getCode().‘|‘.$e->getMessage().PHP_EOL; exit(); } echo (++$start).‘ ‘.$mysqlTableName." data already process ok...".PHP_EOL; } $list = $query->from($mongoTableName)->offset($start)->limit($len)->all($malldb); } echo $mysqlTableName.‘ process is over.‘.PHP_EOL; } }}
mongo数据多进程导入mysql数据库(YII2实现)
标签:mongo
小编还为您整理了以下内容,可能对您也有帮助:
如何将MongoDB数据库的数据迁移到MySQL数据库中
在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据迁移到MySQL。下面是小编日常整理的一种sqlserver数据库迁移的方法。
一、SQL Server中常用数据类型与MySQL不同的地方
二、将SQL Server数据迁移到MySQL需要注意的一些问题
1、唯一索引的不同,sql server的唯一索引的字段只能允许存在一个null值,而mysql,一直oracle中唯一索引对应的字段都允许存在多个null值。
2、存储过程的语法存在很大的不同,存储过程的迁移是最麻烦的,需要仔细修改。
3、程序中部分写的SQL语句由于语法的不同也要相应的修改。
三、将SQL Server数据迁移到MySQL的常见方法
1、使用 SQLyog 迁移
Yii2框架操作数据库的方法分析【以mysql为例】
本文实例讲述了Yii2框架操作数据库的方法。分享给大家供大家参考,具体如下:
准备数据库
DROP
TABLE
IF
EXISTS
`pre_user`;
CREATE
TABLE
`pre_user`(
`id`
int(11)
AUTO_INCREMENT
PRIMARY
KEY,
`username`
varchar(255)
NOT
NULL,
`password`
varchar(32)
NOT
NULL
DEFAULT
'',
`password_hash`
varchar(255)
NOT
NULL
DEFAULT
'',
`email`
varchar(255)
NOT
NULL
DEFAULT
'',
`status`
smallint(6)
NOT
NULL
DEFAULT
10,
`created_at`
smallint(6)
NOT
NULL
DEFAULT
0,
`updated_at`
smallint(6)
NOT
NULL
DEFAULT
0
)ENGINE=InnoDB
DEFAULT
CHARSET=utf8mb4;
配置连接
config\db.php
<?php
return
[
'class'
=>
'yii\db\Connection',
'dsn'
=>
'mysql:host=localhost;dbname=yii2',
'username'
=>
'root',
'password'
=>
'root',
'charset'
=>
'utf8mb4',
'tablePrefix'
=>
'pre_'
];
查看数据库连接是否成功
控制器里打印:
var_mp(\Yii::$app->db);
怎么执行SQL语句?
增删改
//
接收表单的数据
$username
=
'jack';
$sql
=
"INSERT
INTO
{{%user}}
(username,status)
VALUES
(:username,:status)";
//
返回受影响行数
$row
=
\Yii::$app->db->createCommand($sql,['username'=>$username,'status'=>8])->execute();
//
获取自增ID
echo
\Yii::$app->db->getLastInsertID();
查询
$sql
=
"SELECT
*
FROM
{{%user}}
WHERE
id>:id";
//
查询结果是一个二维数组
$userArr
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryAll();
//
如果要查询一个
$user
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryOne();
//
如果要返回单值
//
例如
select
count(*)语句
$count
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryScalar();
echo
$count;
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
您可能感兴趣的文章:Yii2.0高级框架数据库增删改查的一些操作Yii2——使用数据库操作汇总(增删查改、事务)Yii2数据库操作常用方法小结Yii2框架实现数据库常用操作总结Yii2实现跨mysql数据库关联查询排序功能代码Yii+MYSQL锁表防止并发情况下重复数据的方法Yii
连接、修改
MySQL
数据库及phpunit
测试连接Yii实现MySQL多数据库和读写分离实例分析Yii操作数据库实现动态获取表名的方法Yii操作数据库的3种方法
Yii2框架操作数据库的方法分析【以mysql为例】
本文实例讲述了Yii2框架操作数据库的方法。分享给大家供大家参考,具体如下:
准备数据库
DROP
TABLE
IF
EXISTS
`pre_user`;
CREATE
TABLE
`pre_user`(
`id`
int(11)
AUTO_INCREMENT
PRIMARY
KEY,
`username`
varchar(255)
NOT
NULL,
`password`
varchar(32)
NOT
NULL
DEFAULT
'',
`password_hash`
varchar(255)
NOT
NULL
DEFAULT
'',
`email`
varchar(255)
NOT
NULL
DEFAULT
'',
`status`
smallint(6)
NOT
NULL
DEFAULT
10,
`created_at`
smallint(6)
NOT
NULL
DEFAULT
0,
`updated_at`
smallint(6)
NOT
NULL
DEFAULT
0
)ENGINE=InnoDB
DEFAULT
CHARSET=utf8mb4;
配置连接
config\db.php
<?php
return
[
'class'
=>
'yii\db\Connection',
'dsn'
=>
'mysql:host=localhost;dbname=yii2',
'username'
=>
'root',
'password'
=>
'root',
'charset'
=>
'utf8mb4',
'tablePrefix'
=>
'pre_'
];
查看数据库连接是否成功
控制器里打印:
var_mp(\Yii::$app->db);
怎么执行SQL语句?
增删改
//
接收表单的数据
$username
=
'jack';
$sql
=
"INSERT
INTO
{{%user}}
(username,status)
VALUES
(:username,:status)";
//
返回受影响行数
$row
=
\Yii::$app->db->createCommand($sql,['username'=>$username,'status'=>8])->execute();
//
获取自增ID
echo
\Yii::$app->db->getLastInsertID();
查询
$sql
=
"SELECT
*
FROM
{{%user}}
WHERE
id>:id";
//
查询结果是一个二维数组
$userArr
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryAll();
//
如果要查询一个
$user
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryOne();
//
如果要返回单值
//
例如
select
count(*)语句
$count
=
\Yii::$app->db->createCommand($sql,['id'=>1])->queryScalar();
echo
$count;
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
您可能感兴趣的文章:Yii2.0高级框架数据库增删改查的一些操作Yii2——使用数据库操作汇总(增删查改、事务)Yii2数据库操作常用方法小结Yii2框架实现数据库常用操作总结Yii2实现跨mysql数据库关联查询排序功能代码Yii+MYSQL锁表防止并发情况下重复数据的方法Yii
连接、修改
MySQL
数据库及phpunit
测试连接Yii实现MySQL多数据库和读写分离实例分析Yii操作数据库实现动态获取表名的方法Yii操作数据库的3种方法
golang操作mongoDB。将数据取出来在加入到mysql数据库中
这个似乎不是那么容易解答的,首先你要把数据从mongodb查出来,你要确保已经安装了go语言的mongodb驱动。然后对查出来的数据进行解析,查出来的数据是类似json的数据,这个解析代码需要相关的库或者你自己写的。然后再把数据相应的插入mysql里,这里你也要安装go语言的mysql驱动和odbc追问谢谢回答 我已经写好了
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES),是数据库错误造成的,解决方法如下:
1、首先需要更改root的权限远程的访问的权限,进行进入到自己数据库之后,进入mysql数据库中:use mysql。
2、进行执行update user set host='%' where user='root' 的命令进行执行。
3、执行了相关的命令之后,还是需要进行执行的flush privileges的命令。
4、还需要进行修改的是在etc/sysconfig/selinux进行编辑SELINUX=disabled中。
5、设置完成之后还是需要进行重启Linux,在访问之后,不再显示错误的内容。