当前位置

大数据量Drupal 6网站升级到Drupal 7的数据迁移问题

James Qi 在 2015年12月14日 - 11:37 提交
内容摘要:2010年底、2011年初开始尝试Drupal,当时Drupal 7还没有正式版,就用的Drupal 6,到2012年初尝试把网站升级到Drupal 7,升级过程见《本网站从Drupal_6.20升级......

  2010年底、2011年初开始尝试Drupal,当时Drupal 7还没有正式版,就用的Drupal 6,到2012年初尝试把网站升级到Drupal 7,升级过程见《本网站从Drupal_6.20升级到6.24,再升级到7.12》,但后来在升级大数据量网站的时候遇到问题,当时也记录了博文《大数据量Drupal_6网站升级到Drupal_7很麻烦》。今年以来我们陆续都在做Drupal 6网站的升级,现在Drupal 8都推出了,更是要加快升级工作,目前都是剩下一些数据量特别大的站点还在进行中,现在也没有采用曾经的mysql指令的方式来迁移数据,而是设法添加硬件、修改配置设置来让drush migrate-content-fields运行得不中断来进行数据迁移。

All commands in content_migrate: (content_migrate)

content-migrate-field-data Migrate a single field data.

content-migrate-field-structure Migrate a single field structure.

content-migrate-fields Migrate some or all fields.

content-migrate-rollback Rollback migration of some or all fields.

content-migrate-status Show field migration status.

  数据迁移运行结束后需要对迁移后的数据和迁移前的数据进行对比,数量一致的情况下才是正常的,如果明显数量少了就是中途运行中断了,需要重新进行。这个数据表的对比我编写了mysql语句来进行,可以放在sh脚本中来批量检查:

# 检查Drupal 6中多个内容类型共享的字段表

TABLE=(cityname county countyfips zipcode)
for i in "${TABLE[@]}";do
    echo == content_field_$i ==
    $d sql-query "select count(*) amount from content_field_$i;"
#    echo field_data_field_$i
    $d sql-query "select count(*) amount from field_data_field_$i ;"
#    echo field_revision_field_$i
    $d sql-query "select count(*) amount from field_revision_field_$i ;"
done

# 检查Drupal 6中某个内容类型中单独使用的字段表

TABLE=(plus4 range recordtype carrierrouteid predirect streetname suffix postdirect addressprimlownum addressprimhighnum addressprimoddeven bldgfirmname addresssecabbr addressseclownum addresssechighnum addresssecoddeven zipaddonlowsector zipaddonlowsegment zipaddonhighsector zipaddonhighsegment basealternate lacsstatus govbldgindicator financenumber stateabbr congressionaldistrictnum muncitystate urbcitystate preferredlastlinekey)

for i in "${TABLE[@]}";do
    echo == field_${i}_value IS NOT NULL ==
    $d sql-query "select count(*) amount from content_type_zip_code where field_${i}_value IS NOT NULL;"
#    echo field_data_field_$i
    $d sql-query "select count(*) amount from field_data_field_$i ;"
#    echo field_revision_field_$i
    $d sql-query "select count(*) amount from field_revision_field_$i ;"
done

  输出查看结果,统计数量一致就是对的,不一致就需要检查或者重新来运行数据迁移。

  另外,大数据量网站的数据迁移可能会多次失败,用drush content-migrate-rollback退回会在数据库中留下一些field_deleted_data_38、field_deleted_revision_38这样名称的表,可以用sql语句SHOW TABLES LIKE '%deleted%';批量找出来,然后删除腾出数据库空间。

 

 

评论

-- 发自IP地址: 58.49.165.5 (位置 | 谁是)

每个网站都有自己的特点,根据流量、质量、内容领域、针对不同地域和不同语言的访问者等各种因素,都区别很大。我们这边的站点这几年AdSense收入下降很明显,这与Google退出中国大陆搜索,以及国家防火墙越来越严厉有比较大的关系,网速慢了浏览者也少了,访问量下降自然广告收入也下降。

James Qi / 祁劲松

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符