[Sqlite]-->数据迁移备份--从低版本3.6.2到高版本3.8.6

数据迁移

一, 使用.dump命令

命令帮助提示

.dump ?TABLE? ...      Dump the database in an SQL text format

If TABLE specified, only dump tables matching

LIKE pattern TABLE.

理解分析:
       使用.dump命令可以将数据库对象导出成SQL格式。不带任何参数时,.dump将整个数据库导出为数据库定义语言(DDL)和数据库操作语言(DML)命令,适合重新创建数据库对象和其中的数据。如果提供了参数,Shell将参数解析作为表名或视图,导出任何匹配给定参数的表或视图,那些不匹配的将被忽略。

默认情况下.dump 命令的输出定向到屏幕。如:.dump

如果要将输出重定向到文件,请使用.dump[filename]命令,此命令将所有的输出重定向到指定的文件中。若要恢复到屏幕的输出,只需要执行.output stdout命令就OK了。

sqlite>.output file.sql

sqlite>.dump

sqlite>.output stdout

注:如果file.sql不存在,将在当前工作目录中创建该文件。如果文件存在,它将被覆盖。

二,准备测试数据:

CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2));

INSERT INTO COMPANY

SELECT 1,           ‘Paul‘,        32,          ‘California‘  ,20000.0 UNION ALL

SELECT 2,           ‘Allen‘,       25,          ‘Texas‘       ,15000.0 UNION ALL

SELECT 3,           ‘Teddy‘,       23,         ‘Norway‘      ,20000.0 UNION ALL

SELECT 4,           ‘Mark‘,        25,          ‘Rich-Mond‘   ,65000.0 UNION ALL

SELECT 5,           ‘David‘,       27,          ‘Texas‘       ,85000.0 UNION ALL

SELECT 6,           ‘Kim‘,         22,          ‘South-Hall‘  ,45000.0 UNION ALL

SELECT 7,           ‘James‘,       24,          ‘Houston‘     ,10000.0 ;

SELECT * FROM COMPANY;

CREATE TABLE t1(id INT,NAME VARCHAR(20));

INSERT INTO t1 SELECT 1,‘a‘ UNION ALL SELECT 2,‘b‘ UNION ALL SELECT 3,‘c‘;

将低版本的表修改表名为临时表COMPANY_TMP。

ALTER TABLE COMPANY RENAME TO COMPANY_TMP;

三,开始备份操作,在低版本3.6.2上面做备份:

[[email protected] ~]# /usr/bin/sqlite3.bak.3.6.2 tim

SQLite version 3.6.20

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite>

sqlite> .headers on

sqlite> .mode columns

sqlite> .output alltables.sql

sqlite> .dump

sqlite>.exit

四,查看生成的备份文件:

[[email protected] ~]# more alltables.sql

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE "COMPANY_TMP"(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2));

INSERT INTO "COMPANY_TMP" VALUES(1,‘Paul‘,32,‘California‘,20000);

INSERT INTO "COMPANY_TMP" VALUES(2,‘Allen‘,25,‘Texas‘,15000);

INSERT INTO "COMPANY_TMP" VALUES(3,‘Teddy‘,23,‘Norway‘,20000);

INSERT INTO "COMPANY_TMP" VALUES(4,‘Mark‘,25,‘Rich-Mond‘,65000);

INSERT INTO "COMPANY_TMP" VALUES(5,‘David‘,27,‘Texas‘,85000);

INSERT INTO "COMPANY_TMP" VALUES(6,‘Kim‘,22,‘South-Hall‘,45000);

INSERT INTO "COMPANY_TMP" VALUES(7,‘James‘,24,‘Houston‘,10000);

CREATE TABLE t1(id INT,NAME VARCHAR(20));

INSERT INTO "t1" VALUES(1,‘a‘);

INSERT INTO "t1" VALUES(2,‘b‘);

INSERT INTO "t1" VALUES(3,‘c‘);

COMMIT;

[[email protected] ~]#
看到都是一条条备份成的dml、ddl的sql语句。

五,在高版本3.8.6上面恢复数据

1,在3.8.6上面建立相同的COMPANY表,不过多添加了2个字段IPHONE和LOGIN_DATE,如下所示:

DROP TABLE IF EXISTS COMPANY;

CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2),IPHONE VARCHAR(16) NOT NULL,LOGIN_DATE DATETIME);

INSERT INTO COMPANY

SELECT 1,           ‘Paul‘,        32,          ‘California‘  ,20000.0,‘14782121412‘,DATETIME(‘NOW‘) UNION ALL

SELECT 2,           ‘Allen‘,       25,          ‘Texas‘       ,15000.0,‘13982121412‘,DATETIME(‘NOW‘) ;

SELECT * FROM COMPANY;

开始恢复导  2, 入原来备份的数据sql脚本

[[email protected] ~]# sqlite3 ti

SQLite VERSION 3.8.6 2014-08-15 11:46:33

Enter ".help" FOR USAGE hints.

sqlite> .headers ON

sqlite> .MODE COLUMNS

sqlite> .READ alltables.sql

sqlite> .TABLE

COMPANY      COMPANY_TMP  t1

sqlite>

3,在数据迁移从旧临时表迁移到新表之前,查下现有表的数据

sqlite>SELECT * FROM COMPANY;

ID          NAME        AGE         ADDRESS     SALARY      IPHONE       LOGIN_DATE

----------  ----------  ----------  ----------  ----------  -----------  -------------------

1           Paul        32          California  20000       14782121412  2014-08-29 11:14:07

2           Allen       25          Texas       15000       13982121412  2014-08-29 11:14:07

sqlite>

4,开始使用INSERT迁移数据到新添加字段的表COMPANY

sqlite> INSERT INTO COMPANY(ID,NAME,AGE,ADDRESS,SALARY,IPHONE) SELECT ID,NAME,AGE,ADDRESS,SALARY,‘‘ FROM COMPANY_TMP ;

sqlite> SELECT * FROM COMPANY;

ID          NAME        AGE         ADDRESS     SALARY      IPHONE       LOGIN_DATE

----------  ----------  ----------  ----------  ----------  -----------  -------------------

1           Paul        32          California  20000       14782121412  2014-08-29 11:14:07

2           Allen       25          Texas       15000       13982121412  2014-08-29 11:14:07

1           Paul        32          California  20000

2           Allen       25          Texas       15000

3           Teddy       23          Norway      20000

4           Mark        25          Rich-Mond   65000

5           David       27          Texas       85000

6           Kim         22          South-Hall  45000

7           James       24          Houston     10000

sqlite>

看到迁移数据之后的显示,旧表数据已经迁移到新表了。

六,最后删除旧的临时表

sqlite> DROP TABLE IF EXISTS COMPANY_TMP;

sqlite>

至此,整个数据迁移工作顺利结束。

时间: 2024-10-07 05:46:32

[Sqlite]-->数据迁移备份--从低版本3.6.2到高版本3.8.6的相关文章

怎么使用CAD版本转换器,如何将高版本CAD转低版本?

怎么使用CAD版本转换器,如何将高版本CAD转低版本?在CAD行业中,每天都会接触到CAD图纸,而且在查看CAD图纸的过程中肯定会遇到许多的问题,那就是有的时候在查看dwg格式的CAD图纸的时候,不管怎么样都打不开,小编后来才知道是CAD文件的版本太高的缘故,不知道小伙伴们有没有遇到过这样的情况,那这样我们要怎么使用CAD版本转换器,又如何将高版本的CAD转低版本呢?具体要怎么来进行操作?那下面小编就来教教大家具体操作方法. 第一步:首先,打开电脑,在电脑桌面上任意的打开一个浏览器,在浏览器的搜

怎么将低版本的CAD转换成高版本

怎么将低版本的CAD转换成高版本?就是在我们日常的工作中,每天最常见的就是CAD格式的图纸,但是有的时候在网上查找的CAD图纸,在进行打开的时候发现打不开,那就是因为CAD文件的版本太低,导致在较高的CAD编辑器中打不开,这个时候我们就需要将CAD版本精装转换,那怎么将低版本的CAD转换成高版本,具体要怎么来进行操作了,下面小编就是用迅捷CAD转换来教大家具体的操作步骤,有兴趣的朋友可以来看一下. 第一步:首先打开自己常用的电脑,如果电脑桌面中没有CAD转换器的,可以在电脑桌面中任意的打开一个浏

Mysql(三) ------数据迁移备份(针对数据量很大的情况)

新跳槽了一家公司,上来就是数据库调优和数据迁移.调优那部分后面再补上来.公司目前用的是5.1的数据库,很老了,而且随着业务的发展需要做读写分离和主从复制.想把所有的数据都挪到新库上去.但这个库大概有60G的数据.主要思路: 1.创建用户,并授权 2.搭建主从,做到主从同步,数据目前先保持一致,在切换主从同步切换ipMysql5.1已有数据量了,为保证数据的一致性.故需要锁库,等数据导入后再解锁 3.需要注意从库和主库的引擎,字符集show variables like 'character_se

Mysql数据迁移备份

新跳槽了一家公司,上来就是数据库调优和数据迁移.调优那部分后面再补上来.公司目前用的是5.1的数据库,很老了,而且随着业务的发展需要做读写分离和主从复制.想把所有的数据都挪到新库上去.但这个库大概有60G的数据.主要思路: 1.创建用户,并授权 2.搭建主从,做到主从同步,数据目前先保持一致,在切换主从同步切换ipMysql5.1已有数据量了,为保证数据的一致性.故需要锁库,等数据导入后再解锁 3.需要注意从库和主库的引擎,字符集show variables like 'character_se

mysql学习之旅-数据迁移-备份-恢复

1.数据迁移 将/tmp/t3.txt中的数据导入到t3表中,数据以逗号为分割符 load data infile ‘/tmp/t3.txt’ into table t3 fields terminated by ','; 将table2表中的数据导出为文件data.txt,以逗号为分隔符 SELECT * INTO OUTFILE 'data.txt' ->     FIELDS TERMINATED BY ',' ->     FROM table2; #####在mysql命令行内执行

使用低版本的Xtrabackup还原较高版本的Xtrabackup创建的全备份文件存在的问题

最近要将使用xtrabackup备份的多台MySQL Server的数据还原到另外一台MySQL服务器上并使用不同的端口启动多个实例来作为review环境.实用程序执行自动还原的过程中有几个数据库实例启动失败.检查数据目录中的错误日志,发现如下启动错误: 2015-02-02 12:31:36 27876 [Note] Plugin 'FEDERATED' is disabled. 2015-02-02 12:31:36 27876 [Note] InnoDB: The InnoDB memor

让44.1版本的sketch打开更高版本的sketch文件

我们都知道,sketch的有效license与版本挂钩.最近设计师又更新了sketch版本,导致她生成的源文件我都无法打开. 毕竟我不是使用sketch进行UI设计,仅用它来查看设计稿参数,再花99美刀实在很不划算.而sketch导出html的方式体验非常不好,因此我只好退而求其次,让我旧版本的sketch能够打开新版本的sketch源文件就好. 分析 经过一番资料查阅,我发现:sketch文件实际上是一个使用zip打包的文件包.这个文件包里面有定义生成该文件的sketch版本以及能够打开该文件

django -> 博客项目sqlite数据迁移至mysql

准备: 云服务器上安装mysql 本地虚拟环境安装mysqlclient(下载地址): python -m pip install  mysqlclient-1.4.4-cp36-cp36m-win_amd64.whl mysql数据设置 # root账号登录 mysql -u root -p # 创建数据库 — mysite_db create database mysite_db default charset=utf8mb4 default collate utf8mb4_unicode_

(转)在低版本的SDK里使用高版本函数@SuppressLint("NewApi") or @TargetApi?

@SuppressLint 和 @TargetApi达到的效果是一样的,相对于SuppressLint ,TargetApi会根据函数里使用的API,严格匹配SDK版本,给出编译错误,但是SuppressLint 则忽略了SDK版本. 例如: [java] view plaincopy @TargetApi(Build.VERSION_CODES.FROYO) public static File getExternalCacheDir(Context context) { File dir;