MySQL 导入多个 database,每个 database 几十 G 的数据,怎么做

MySQL 导入多个 database,每个 database 几十 G 的数据,怎么做,第1张

常规导入数据方法:

1>.采用InnoDB存储引擎;

2>.设置innodb_buffer_pool_size较大的值,且设置脏数据:innodb_max_dirty_pages_pct=95;

3>.关闭log-bin 日志;

4>.设置sort_buffer_pool_size的值稍微大一点;

5>.使用多表空间:innodb_file_per_table;

6>.innodb_flush_log_at_trx_commit=0 且sync_binlog=0

7>.多个mysql客户端同时导入数据库备份文件,后台执行就是;

不过还是建议数据量大直接拷贝数据文件,更直接一点。一般来说几十G的数据导入SQL几乎不可能。

启动几个线程,每个线程循环进行sql *** 作。

代码的功能很简单,启动几个线程,每个线程循环进行sql *** 作,打印输出,如果是只有一个线程的话怎么用都没有问题,但是两个或者超过两个线程就会一直有Datareader被占用的这个错误。可以用下面的代码:

publicpartialclassForm2:Form

{

privateDataBasePoolm_connpool=DataBasePool.getInstance()

privateMySqlConnectionm_conn

privateRandomm_random=newRandom()

publicForm2()

{

InitializeComponent()

}

privatevoidForm2_Load(objectsender,EventArgse)

{

ThreadPool.SetMaxThreads(50,50)

}

privatevoidbutton1_Click(objectsender,EventArgse)

{

for(inti=0i

{

stringtmpStr="【"+i.ToString()+"】"

ThreadPool.QueueUserWorkItem(newWaitCallback(ProcessRun),tmpStr)

//Thread.Sleep(100000)

}

}

privatestaticobjectobj=newobject()

privatevoidProcessRun(ObjectstateInfo)

{

m_conn=m_connpool.getConnection()

inti=m_random.Next(25000)

stringtmpStr=stateInfo.ToString()

while(true)

{

stringsql="selectlocfromtable_ipaddrwhereid='"+i+"'"

MySqlCommandcmd=newMySqlCommand(sql,m_conn)

try

{

strings=cmd.ExecuteScalar().ToString()

Console.WriteLine(tmpStr+"_"+s)

//lock(obj)

//{

//strings=cmd.ExecuteScalar().ToString()

//Console.WriteLine(tmpStr+"_"+s)

//}

//Thread.Sleep(10000)

}

catch(Exceptionex)

{

Console.WriteLine("error!"+ex.Message)

}

//m_connpool.closeConnection(m_conn)

}

}

}

}

先看数据库的表引擎:

MyISAM的话,直接停机复制物理文件,开机,修复表错误,与原来的机器做主从。

INNODB的话,xtrabackup备份和恢复MySQL数据库,全量和增量备份。

任何物理迁移都比逻辑导出导入要快得多。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/8575185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存