您的当前位置:首页正文

mongo数据多进程导入mysql数据库(YII2实现)

2023-11-10 来源:好兔宠物网

<?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,在访问之后,不再显示错误的内容。