如何在不丢失数据的情况下从 Chrome 35 降级到 34?

Rob*_*b W 4 google-chrome migration downgrade chromium

在将 Chromium 从 34 升级到 35 之后,Chromium 的可用性走下坡路。所以我决定降级 Chromium。幸运的是,以前版本的 Chromium 仍然在我磁盘上的某个位置,因此降级(在 ArchLinux 中)非常简单:

sudo pacman -U /var/cache/pacman/pkg/chromium-34.0.1847.137-1-x86_64.pkg.tar.xz
Run Code Online (Sandbox Code Playgroud)

运行上一个命令后,Chromium 确实启动了,但不幸的是,我在启动时不断收到以下消息的窃听:

无法使用您的个人资料,因为它来自较新版本的 Google Chrome。某些功能可能不可用。请指定不同的配置文件目录或使用较新版本的 Chrome。

摆脱此消息的一种方法是删除~/.config/chromium/Default/Web Data,但这也导致我的搜索引擎关键字消失

如何在不丢失任何数据的情况下降级 Chromium?

注意:我使用的是 Linux,但此问题与平台无关。随意从Windows等非Linux操作系统的角度回答。

Rob*_*b W 8

注意:关闭 Chrome 并在使用它之前备份您的个人资料!

Web Data是SQLite数据库,所以我用sqlite3程序打开数据库。

  1. “Web Data”数据库的当前版本是什么?(跑SELECT * from meta;)

    sqlite> SELECT * FROM 元;
    默认搜索提供程序 ID|34
    last_compatible_version|55
    版本|55
    内置关键字版本|70
  2. 前面输出中强调的行是指 Chromium 中的内部数据库版本号。对于每个版本,您都可以在Chromium 的源代码 (autofill_table.cc) 中找到相关的迁移代码。具体看一下AutofillTable::MigrateToVersion方法。由于我的数据库版本是 55,我查看了“case 55”

    案例 55:
          *update_compatible_version = true;
          返回MigrateToVersion55MergeAutofillDatesTable ();

    找到这个方法后,我几乎准备写一个SQLite查询来反向迁移。

  3. 使用上一步中的知识(以及来自另一台计算机上不同表的原始模式),我构建了以下查询(将查询复制粘贴到sqlite3):
    注意:此查询特定于将 Chrome 35 降级到 34!

    CREATE TABLE autofill_v54 (
        name VARCHAR,
        value VARCHAR,
        value_lower VARCHAR,
        pair_id INTEGER PRIMARY KEY,
        count INTEGER DEFAULT 1);
    CREATE TABLE autofill_dates (
        pair_id INTEGER DEFAULT 0,
        date_created INTEGER DEFAULT 0);        
    
    INSERT INTO autofill_v54 (
        name,
        value,
        value_lower,
        count
    ) SELECT name, value, value_lower, count FROM autofill;
    
    INSERT INTO autofill_dates (
        pair_id,
        date_created
    ) SELECT pair_id, date_created
      FROM autofill_v54 a54 JOIN autofill a USING (name, value);
    
    DROP TABLE autofill;
    ALTER TABLE autofill_v54 RENAME TO autofill;
    
    CREATE INDEX autofill_name ON autofill (name);
    CREATE INDEX autofill_name_value_lower ON autofill (name, value_lower);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 恢复迁移后,您可以安全地降低数据库版本:

    UPDATE meta SET value='54' WHERE key='version' OR
                                     key = 'last_compatible_version';
    
    Run Code Online (Sandbox Code Playgroud)
  5. 关闭数据库使用 .quit

完成所有这些步骤后,我启动了 Chromium,没有烦人的弹出窗口,所有配置文件数据仍然完好无损!