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

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

在将 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

运行上述命令后,Chromium 确实启动了,但不幸的是,我在启动时一直被以下消息困扰:

您的配置文件来自较新版本的 Google Chrome,因此无法使用。某些功能可能不可用。请指定其他配置文件目录或使用较新版本的 Chrome。

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

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

注意:我使用的是 Linux,但这个问题与平台无关。欢迎从非 Linux 操作系统(例如 Windows)的角度来回答。

答案1

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

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

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

    sqlite> 从元中选择*;
    默认搜索提供商 ID|34
    最新兼容版本|55
    版本|55
    内置关键字版本|70
  2. 上一个输出中突出显示的行指的是 Chromium 中的内部数据库版本号。对于每个版本,您都可以在以下位置找到相关的迁移代码:Chromium 的源代码(autofill_table.cc)。具体来说,看看AutofillTable::MigrateToVersion方法。由于我的数据库版本是 55,所以我查看了“案件 55”

    案例55:
          *更新兼容版本 = 真;
          返回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);
    
  4. 恢复迁移后,您可以安全地降低数据库版本:

    UPDATE meta SET value='54' WHERE key='version' OR
                                     key = 'last_compatible_version';
    
  5. 使用以下方法关闭数据库.quit

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

答案2

我确认:使用 sqlite3 的解决方案运行良好!

我是一个 Ubuntu 用户 (14.04),但是我尝试了这种方法,不是使用 chromium,而是使用 google-chrome-stable。

我已将 chrome 从 35 降级到 34,因为在 35 版本中无法运行 java 小程序。:-(

sudo apt-get purge google-chrome-stable
sudo rm -f /etc/apt/sources.list.d/google-chrome.list*
sudo apt-get update
cd ~/Downloads
wget http://95.31.35.30/chrome/pool/main/g/google-chrome-stable/google-chrome-stable_34.0.1847.137-1_amd64.deb

删除此源后,google-chrome 将不再自动更新。我已使用 gdebi 从 nautilus 安装了版本 34。您可以使用以下命令安装 gdebi:

sudo apt-get install gdebi

问题从这里开始...消息 ='您的配置文件无法使用,因为它来自较新的...'
您可以像这样安装 sqlite3:

sudo apt-get install sqlite3

要执行上述解决方案(由 Rob W 提供),请执行以下操作:

cd ~/.config/google-chrome/Default
sqlite3 Web\ Data

之后,只需复制/粘贴 Rob W. 给出的步骤 1、3、4、5。
希望这会有所帮助。;-)

相关内容