-
sqlite迁移到mysql脚本的方法
2020-09-09 14:47:04主要介绍了sqlite迁移到mysql脚本的方法,需要的朋友可以参考下 -
SQLITE 迁移到 MYSQL
2010-09-09 11:29:10接同事需求,要求从SQLITE的数据转到MYSQL,这东西以前也没接触过。这里搜搜,那里试试,下面把过程列一下。 主要过程分三步:1,把SQLITE表结构导出来,作一定的格式调整2,把SQLITE数据导出来,作特殊字符的处理3...接同事需求,要求从SQLITE的数据转到MYSQL,这东西以前也没接触过。这里搜搜,那里试试,下面把过程列一下。
主要过程分三步:
1,把SQLITE表结构导出来,作一定的格式调整
2,把SQLITE数据导出来,作特殊字符的处理
3,导出MYSQL(注意字符集)[@more@]下面是我操作的过程, 有两个部分:单表操作和批量处理(含脚本)
########### 单表操作 ####################
# 打开SQLITE DB
root> sqlite3 mig.db
# 查看表,可用用".help"获得帮助
sqlite>.tables
# 导出数据表结构
sqlite>.output /tmp/heyf/createtable.sql
sqlite>.schema accounts_profile
# 调整建表语句格式, 把双引号去掉,并加上MYSQL的建表约束。
root>sed 's/"/`/g' createtable.sql > create_onmysql.sql
root>sed -i -e 's/^);$/) engine=innodb default charset=utf8 collate=utf8_bin ;/g' create_onmysql.sql
root>sed -i 's/integer.*PRIMARY KEY/int NOT NULL auto_increment PRIMARY KEY/g' create_onmysql.sql
# sqlite中,为 INTEGER PRIMARY KEY 的字段将自动增加
root>sed -i 's/ text/ longtext/g' create_onmysql.sql
# sqlite中,text 最大长度为2G, 在MYSQL中需要改成longtext;
# 在MYSQL把表建上:
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test < create_onmysql.sql
# 导出数据
sqlite>.mode insert accounts_profile_starred_review_requests
sqlite>.output /tmp/heyf/accounts_profile_starred_review_requests.sql
sqlite>select * from accounts_profile_starred_review_requests;
sqlite>.output stdout
# 处理特殊字符
DOTABLE=accounts_profile_starred_review_requests
cd /tmp/heyf
DOFILE=${DOTABLE}.sql
sed -e "s///g" $DOFILE > ${DOFILE}.new
# 将数据导入MYSQL
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test -e "truncate table ${DOTABLE};"
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test < ${DOFILE}.new
如果表很多:那我们就需要批量处理一下啦,下面是一些批量脚本 :
########### 批量处理 ####################
# 打开SQLITE DB
root> sqlite3 mig.db
# 查看表
sqlite>.tables
# 把所有表名都放入TABLE.LIST文件
# 导出数据表结构
sqlite>.output /tmp/heyf/createtable.sql
sqlite>.schema accounts_profile
sqlite>.schema ... ....
#在MYSQL 创建表结构
root>sed 's/"/`/g' createtable.sql > create_onmysql.sql
root>sed -i -e 's/^);$/) engine=innodb default charset=utf8 collate=utf8_bin ;/g' create_onmysql.sql
root>sed -i 's/integer.*PRIMARY KEY/int NOT NULL auto_increment PRIMARY KEY/g' create_onmysql.sql
# sqlite中,为 INTEGER PRIMARY KEY 的字段将自动增加
root>sed -i 's/ text/ longtext/g' create_onmysql.sql
# sqlite中,text 最大长度为2G, 在MYSQL中需要改成longtext;root>mysql -uroot -h127.0.0.1 --default-character-set=utf8 test < /tmp/heyf/create_onmysql.sql
# SQLITE 中导出数据
## 将所有的表生成导出语句(SQLITE)
## cat create_exp.sh
-------------------------
#!/bin/bash
[ $# -ne 1 ] && exit 1
TABFILE=$1
WORKDIR=/tmp/heyf/dmpfile/
OUTFILE=exp.sql
while read LINE
do
echo $LINE
echo ".mode insert $LINE" >> $OUTFILE
echo ".output $WORKDIR/${LINE}.sql ">> $OUTFILE
echo "select * from $LINE ;" >> $OUTFILE
echo ".output stdout " >> $OUTFILE
done < $TABFILE
-------------------------
## 运行后将产生 sqlite 所有表的导出语句
sh create_exp.sh table.list## 现在进行SQLITE可以将所有表的数据导出来。
sqlite3 /home/admin/foryunfei/heyf.db
.read /tmp/heyf/exp.sql# 处理特殊字符
## 现在需要将所有的SQL文件中的""替换成”“,以使SQL能正确执行
## cat replace.sh
-------------------------
#!/bin/bash
[ $# -ne 1 ] && exit 1
TABFILE=$1
WORKDIR=/tmp/heyf/dmpfile/
while read DOTABLE
do
cd $WORKDIR
DOFILE=${DOTABLE}.sql
sed -e "s///g" $DOFILE > ${DOFILE}.new
done < $TABFILE
-------------------------
## sh replace.sh table.list
## 将数据导入MYSQL
## cat imp.sh
-------------------------
#!/bin/bash
[ $# -ne 1 ] && exit 1
TABFILE=$1
WORKDIR=/tmp/heyf/dmpfile/
while read DOTABLE
do
cd $WORKDIR
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test -e "truncate table ${DOTABLE};"
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test < ${DOTABLE}.sql.new
done < $TABFILE
-------------------------
## sh imp.sh table.list来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/703656/viewspace-1038111/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/703656/viewspace-1038111/
-
Django中将sqlite迁移到mysql
2020-03-11 23:28:47阿里云申请 ✔ python安装 ✔ 虚拟环境搭建 ✔ Django安装配置 ✔ Apache安装 ✔ ...接下来需要把原项目中使用的sqlite迁移到mysql中 修改settings.py 首先想到的就是将Django项目里的setting.py中的...- 阿里云申请 ✔
- python安装 ✔
- 虚拟环境搭建 ✔
- Django安装配置 ✔
- Apache安装 ✔
- Apache+Django配置 ✔
- git服务器搭建,实现版本控制同时部署代码 ✔
- 本地项目使用git发布至服务器端 ✔
- mysql安装配置 ✔
接下来需要把原项目中使用的sqlite迁移到mysql中
千万注意:在迁移前确保mysql的字符集已经修改为utf8或者utf8mb4,否则遇到中文的话问题会出现编码错误!!修改方法见Ubuntu下Mysql的安装和配置
修改settings.py
首先想到的就是将Django项目里的
setting.py
中的DATABASES
项改为mysql,原来的sqlite注释掉别删,等会还要用到DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'DataBaseName', 'USER': 'user', 'PASSWORD': 'password', 'HOST': 'HostName', 'PORT': '3306', } }
然后运行
python manage.py makemigrations
创建迁移文件当然没这么简单,直接报错:
ModuleNotFoundError: No module named 'MySQLdb'
安装mysql相关库
使用pip安装
pymysql
和mysqlclient
库,再次创建迁移文件,提示:No changes detected
这是因为之前使用sqlite时已经做过了迁移操作,且之后没有任何更新,所以要加上参数为指定应用来强制创建空的数据库迁移文件:
python manage.py makemigrations --empty [应用名称]
然后执行迁移操作:
python manage.py migrate
查看mysql数据库,已经在相应数据库中创建了空表
从sqlite导出数据
将Django项目里的
setting.py
中的DATABASES
项再改为sqlite执行命令将数据导出为json文件:
python manage.py dumpdata > initial_data.json
有小坑,看下面!!
将数据导入mysql
再次将
setting.py
中的DATABASES
项改为mysql执行命令导入json文件:
python manage.py loaddata initial_data.json
,报错:
发现该json文件是utf-16LE编码,改为utf-8保存,再次导入,继续报错:
错误信息提示
content_type
表出错,网上查询得知Django自带的contentType会导致该问题,解决方法是在导出数据的时候加上参数--exclude
来跳过部分表:python manage.py dumpdata --exclude=contenttypes --exclude=auth.Permission > initial_data.json
重新导出json,再次
loaddata
导入,没有报错,查看数据库的数据正常网站访问出错
以为大功告成,结果访问网站却又报错了:
The server encountered an internal error or misconfiguration and was unable to complete your request.
这是因为在本地python中安装了
pymysql
和mysqlclient
库,而服务器端没安装,使用python -m pip
安装这两个库,但在安装mysqlclient
时又产生错误:OSError: mysql_config not found
网上查询得知这是Ubuntu系统缺少
libmysqld-dev
和libmysqlclient-dev
两个包,apt install
安装两个包后,再次安装mysqlclient
库,重启apache服务,访问网站,成功! -
Django 部署准备之一SQLite迁移到MySQL
2019-11-03 10:51:12前言 Django开发的时候为了方面,内置了sqlite数据库,可以直接用,不用过多关心,直接ORM操作即可。...等我们Django业务基本开发完了,部署之前,我们最好把SQLite迁移到Mysql,现在本地Mac电脑...前言
Django开发的时候为了方面,内置了sqlite数据库,可以直接用,不用过多关心,直接ORM操作即可。
Mysql Sqlite 特点 为服务端设计 轻量级,可嵌入手机应用 高并发 能 不能 占用内存 比SQLite 小 适用性 服务器 手机,桌面应用 等我们Django业务基本开发完了,部署之前,我们最好把SQLite迁移到Mysql,现在本地Mac电脑为例,操作一下迁移以及遇到的坑
安装
方式一(手动安装,不推荐)
- 下载地址:https://www.mysql.com/downloads/ - 滚动网页至最下方,选择`DOWNLOADS => MySQL Community Server`
跟着提示安装后需要配置环境变量
不配置环境变量的话,执行mysql命令,必须在mysql的安装目录下,所以选择配置环境变量。在终端中,进入到用户目录下,执行vim .bash_profile
或者直接执行vim ~/.bash_profile
,按i
进入编辑模式,添加如下内容,按esc
,输入:wq
退出并保存。# mysql export PATH=${PATH}:/usr/local/mysql/bin #快速启动、结束MySQL服务, 可以使用alias命令 alias mysqlstart='sudo /usr/local/mysql/support-files/mysql.server start' alias mysqlstop='sudo /usr/local/mysql/support-files/mysql.server stop'
我们就可以在任何地方执行mysql命令了。
- 终端输入
myqsl -u root -p
启动MySQL,安装地址是/usr/local/mysql
方式二(Homebrew)
brew install mysql # brew uninstall mysql # brew list mysql -V mysql Ver 8.0.18 for osx10.14 on x86_64 (Homebrew)
以上安装成功默认是没有密码的,MySQL 8以上新增了安全配置引导,下面有介绍,如果不想设置密码,可以直接进入
mysql -u root -p 直接回车即可
MySQL 密码安全设置
MySQL 8新增了安全设置向导,对于在服务器部署MySQL来说,简化了安全设置的操作。
- 密码强度验证插件
- 修改root账号密码
- 移除匿名用户
- 禁用root账户远程登录
- 移除测试数据库(test)
- 重新加载授权表
- 示例
/usr/local/opt/mysql/bin/mysql_secure_installation # mysql 提供的配置向导 Securing the MySQL server deployment. Enter password for user root: VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: no #这里我选了不安全密码强度验证插件 Using existing password for root. Change the password for root ? ((Press y|Y for Yes, any other key for No) : no #这里我选了不修改root密码 ... skipping. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : yes Success. #这里我选择了移除匿名用户 Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : yes Success. #这里我选择了禁用root账号远程登录访问 By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : no ... skipping. #这里我选择了不移除测试数据库 Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : yes Success. #这里我选择了重新加载权限表,因为我前面选择了禁用root账号远程登录访问 All done!
MySQL忘记了Root密码操作(em…这个真的很重要)
MySQL官网链接忘记密码操作
这里看下除了Window
的其他系统如何操作。
1.如果有不要,请先停止MySQL相关服务。ps -ef | grep mysql 1118089483 2247 1 0 3:12下午 ttys000 0:00.02 /bin/sh /usr/local/Cellar/mysql/8.0.18/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/FVFXGM44HV29.pid 1118089483 2358 2247 0 3:12下午 ttys000 0:04.24 /usr/local/Cellar/mysql/8.0.18/bin/mysqld --basedir=/usr/local/Cellar/mysql/8.0.18 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/8.0.18/lib/plugin --log-error=FVFXGM44HV29.err --pid-file=/usr/local/var/mysql/FVFXGM44HV29.pid 1118089483 2522 2154 0 3:24下午 ttys000 0:00.01 grep mysql 如果有相关进程,需要关闭 mysql.service stop # kill pid
2.
--skip-grant-tables
启动
该方法重启,任何人都无需密码就可以使所有的权限,因此,我们会跟上--skip-networking
阻止远程链接/usr/local/bin/mysqld --skip-grant-tables --skip-networking &
3.修改密码
这里直接alter
是会报错的,需要先刷新权限mysql> FLUSH PRIVILEGES; mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; mysql> show columns from user; # 查看列 desc 表名; mysql> select host, user, authentication_string from user; # 查看信息
4.这里的密码默认都是高强度的,别入你之前通过安全设置设置过,你可以修改对应的全局密码管理设置
mysql> show variables like 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.00 sec) mysql>
这里看到倒数第二条是
MEDIUM
,我们需要改成LOW
,修改密码强度SET GLOBAL validate_password.policy=LOW;
然后修改密码位数
SET GLOBAL validate_password.length=6;
现在可以为MySQL设置简单密码了,只要满足六位的长度即可,
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
重启
mysql.server restart #也可以使用命令:brew services restart mysql #不过建议使用命令:mysql.server restart在出错时可以看到更准确完整的信息
建表
我们开发时用的SQLite数据库,在生产部署之前都要把本地的数据表迁移到MySQL去。由于MySQL的密码强度问题,经常忘记密码的同学直接去上面的知识点操作一下。下面开始建数据库,准备配置到Django的
setting.py
中去。ps -ef | grep mysql # 没启动就启动 mysql.service start # 进入 mysql -u root -p # 查看 show databases; # 开始创建 create database mikejingsitedb charset=utf8mb4 default collate utf8mb4_unicode_ci;
看到这里有些小伙伴会觉得有点不对啊,一般的操作是
create database xxx charset=utf8
,这里花里胡哨的操作的参数,下面介绍下collate和charset用法
default collate utf8mb4_unicode_ci;
介绍collate之前先说个题外话,大家应该都很熟悉,mysql中utf8和utf8mb4两种编码,可以这么说吧,大家可以忘记这个utf8
这个东西,永远使用utf8mb4
,这是MySQL的遗留问题,utf8
最多支持3bytes字节长度的字符编码,对于一些需要占据4个字节的文字,比如emoji表情,mylsqutf8
就不支持了,要使用utf8mb4
才行。所谓
collate utf8mb4_unicode_ci
,通俗的翻译为校验通过utf8
超集,utf8mb4
(utf8 mobile 4bytes)的unicode编码,而且是case insensitive
(忽略大小写,还有个缩写是cs=case sensitive,顾名思义开始需要比较大小写)。对于MySQL中那些类型字段,如VARCHAR
,CHAR
,TEXT
类型的列,都需要一个COLLATE
类型来告诉他们排序的规则。简而言之,COLLATE
会影响到ORDER BY
语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响DISTINCT、GROUP BY、HAVING语句的查询结果。凡是涉及到排序,比较的地方,都会和COLLATE有关。MySQL字符编码
有了上面的介绍,我们就需要在
my.cnf
(Mac)my.ini
(Windows)进行字符集配置。
默认字符集使用utf8mb4
版本#修改配置文件 vim /usr/local/etc/my.cnf [mysqld] ... [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] default-character-set=utf8mb4 character-set-server=utf8mb4 collation-server=utf8mb4_general_ci
- 重启查看
mysql.server restart #也可以使用命令:brew services restart mysql #不过建议使用命令:mysql.server restart在出错时可以看到更准确完整的信息
MySQL不同版本加密方式兼容
1.配置文件修改
MySQL 8.0默认是cacheing_sha2_password
5.7和5.6是mysql_native_password
,为了兼容设置如下把默认加密方式改成default_authentication_plugin = mysql_native_password
新版本如果你用
Navicat
去链接,就会报错2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found
编辑
vim /usr/local/etc/my.cnf
插入一条数据
default_authentication_plugin=mysql_native_password
上面的这种方案对已有的账户是无法修改的,只是后续新增的账户就会默认的Plugin变成mysql_native_password
2.sql修改ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码 FLUSH PRIVILEGES; #刷新权限
因此,后面授权新用户的方式可以在后面跟一个加密方式,默认是跟着配置文件走
create user 'root'@'localhost' identified WITH mysql_native_password BY 'password'; grant all privileges on *.* to root@'localhost' with grant option; flush privileges;
时区问题(后面启动博客就能遇到)
这里先把数据库的时区问题解决了
macOS。这些文件的一个可能位置是/usr/share/zoneinfo
目录 导入mysql数据时区mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p
导入后可以通过下面两个方式查看时区是否正确
select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00')); SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP); # 如果是中国标准时间, 会输出08:00
配置Django的数据库为MySQL
create database mikejingsitedb charset=utf8mb4 default collate utf8mb4_unicode_ci;
1.上面已经创建好了数据库,开始配置settings.py
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } # mikejingsitedb mkjkejingsitedb2 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 后端数据库引擎 'NAME': 'mkjkejingsitedb2', # Django对应mysql数据库的名字 'USER': 'mkj', # 用户 'PASSWORD': 'M@ikejing123', # 密码 'HOST': 'localhost', # ip 'PORT': '3306', # 端口 } }
注意分配用户:
我们上面的操作都是MySQL的root用户,有最高权限,不能直接写在这里,因此需要分配对应数据库权限的用户。# 查看用户 select host, user from user; # 创建新用户 create user 'xxx'@'localhost' identified by 'xxxx'; grant all privileges on mikejingsitedb.* to 'mkj'@'localhost'; # 分配mikejingsitedb的所有表权限 flush privileges; # 刷新 # 修改已有权限用户 # grant all privileges on mikejingsitedb.* to '已有用户'@'localhost'; # 分配mikejingsitedb的所有表权限 # flush privileges; # 刷新 # 登录查看 mysql -u mkj -p show databases; # 只能查看对应的数据库
2.启动测试
如果这个时候直接运行python manager.py runserver
会提示没有迁移,先执行python manager.py migrate
执行迁移。这里正常情况下就会报错了,因为Django不同版本的数据库操作类不同,提示是没有clientmysql
类似的这种中,Mac中你直接安装pip install xxx
也会安装不上,Windows会有whl版本直接安装编译好的插件。Mac网上那些文章都是直接安装pip install pymysql
但是后续的问题就来了。解决方法:
Django
连接MySQL时默认使用MySQLdb
驱动,但MySQLdb
不支持Python3,因此这里将MySQL驱动设置为pymysql
,使用pip install pymysql
进行安装,然后在工程文件__init__.py
添加以下代码即可。#安装pymysql pip install pymysql #__init__.py import pymysql pymysql.install_as_MySQLdb()
又会报错
django2.2/mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is
required; you have 0.9.3第一种:
django
降到2.1.4
版本就OK了
第二种:修改源码
# 找到base.py文件,注释掉 base.py 中如下部分(35/36行) if version < (1, 3, 3): raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
此时还不够,依然会报错
AttributeError: ‘str’ object has no attribute ‘decode’
#找到operations.py文件(46行,版本不同行数不同哈~自个儿find一下),将decode改为encode #linux vim 查找快捷键:?decode if query is not None: query = query.decode(errors='replace') return query #改为 if query is not None: query = query.encode(errors='replace') return query
OK,问题解决,可以进行迁移了。
3.执行迁移
python manager.py migrate
,可以看到log都是成功的,就说明表迁移成功。4.SQLite数据导出,导入MySQL
# 打开settings.py 的 sqlite注解 注释掉mysql 导出 python manager.py dumpdata > data.json # 打开settings.py 的 mysql注解 注释掉sqlite 导入 python manage.py loaddata data.json
确保Mysql用户表里为空的,如果之前有迁移过数据到Mysql,有可能会出错。注意出错的时候所报的错误信息。如果提示有重复主键,那需要先删掉数据。这些数据是在给MySQL数据库应用迁移文件的时候产生的,一般是
content_type
相关的表。use 你的数据库名; delete from auth_permission; delete from django_content_type;
继续导入
python manage.py loaddata data.json Installed 1057 object(s) from 1 fixture(s)
这里导入数据,如果你编码问题,就会遇到各种报错,比如这种编码问题报错
我们建库的时候已经制定了utf8mb4
,可以看下实际的表数据
成功入库,这个时候如果你用到的缓存表来缓存数据,记得在执行下
python manager.py createcachetable python manager.py runserver
迁移成功,能看到我之前的博客网站数据都正常,而且也能登录,搞定。那么到时候部署到服务器,也是一样的操作
参考文章:
SQL查询语句相关模糊搜索
修改root密码
优雅的忘记密码
MySQL安装
官网忘记密码介绍
django2.2/mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
mysql时区查询
mysql时区导入
数据库迁移中文资料
COLLATE和utf8mb4
Python3出现"No module named ‘MySQLdb’"问题-以及使用PyMySQL连接数据库 - 终端输入
-
superset 0.30.0 数据库从 sqlite 迁移到 mysql
2020-02-19 21:44:07一开始测试的时候用的都是默认的设置,使用的是自带的sqlite的数据库,考虑到长远的使用来说,使用mysql更好一点,也方便操作,因此必需迁移之前的数据到mysql上面。 先从当前服务中导出数据: superset export_data...一开始测试的时候用的都是默认的设置,使用的是自带的sqlite的数据库,考虑到长远的使用来说,使用mysql更好一点,也方便操作,因此必需迁移之前的数据到mysql上面。
先从当前服务中导出数据:
superset export_datasources -b -d -f datasources.yaml superset export_dashboards -f dashboards.json
- 然后修改superset的配置文件,将sqlite源注释掉,添加mysql数据源,如下图所示。
记得要先在mysql中创建superset数据库。
关于如何找到superset的主配置文件,参见我的另一篇文章:
https://blog.csdn.net/weixin_39358657/article/details/105115477
/ SQLALCHEMY_DATABASE_URI # 查找数据库配置项
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'mysql://数据库账号:数据库密码@localhost/数据库名?charset=UTF8' # 把原来的sqlite注释掉 # SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db") # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp' # SQLALCHEMY_DATABASE_URI = 'postgresql://root:password@localhost/myapp'
:wq
保存并退出接下来就相当于重新安装了:
# 重新初始化admin账号 fabmanager create-admin --app superset # 初始化数据库 superset db upgrade # 加载examples superset load_examples # 初始化 superset init
然后先别急着启动服务,还原一下数据
superset import_datasources -p datasources.yaml superset import_dashboards -p dashboards.json
感觉还是挺6的
最后就是启动服务了
superset run -h 0.0.0.0 -p 8088
然后浏览器输入 http://你的ip地址:8088/dashboard/list/
就能够看到恢复的dashboard了
善后事项:
需要修改原先的datasorce
之前连接的外部数据库也要重新输入密码连接一下
目前已知的缺陷:
1、旧的用户无法恢复
2、旧的角色也无法恢复
3、旧的charts和dashbord,新账号无法编辑后直接保存,需要先更改所有者才行综合来说,如果不是已经有了较多的历史数据的话,还是建议从头开始比较好。
- 然后修改superset的配置文件,将sqlite源注释掉,添加mysql数据源,如下图所示。
-
如何将owncloud的数据库从SQLite迁移到MySQL/MariaDB
2019-03-04 11:29:13如果你像我一样,安装owncloud时使用了默认的SQLite数据库,想迁移数据库到MySQL/MariaDB,可以参考如下步骤。 文章转载自How to migrate owncloud from SQLite to MySQL database,感谢作者Magesh Maruthamuthu的... -
将Django2中SQLite迁移到Mysql,折腾
2018-08-17 16:06:24用SQLiteStudio导出SQLite3中的...于是直接在mysql中重新建数据库,并修改Settings设置,连接到mysql中,直接执行数据库同步。 # python3 + Django 2.1 python manage.py migrate 报错,“No module named 'M...
-
Aircraft_war.rar
-
开源项目分析
-
智能车之最小二乘法资料
-
2020-12-01-DVWA.md
-
IAR for ARM系列教程.zip
-
21年新消息队列RabbitMQ视频教程AMQP教程
-
商业的本质——杰克·韦尔奇著
-
UnitySocket异步聊天室
-
微信公众号2021之网页授权一学就会java版
-
IPC-4553A-CN:印制板浸银规范-完整中文版(38页)
-
C++异步串口通信
-
云计算基础-Linux系统管理员
-
自做小网页打算调戏同班同学(健康状况填报)
-
在线视频学习网站的设计与实现.
-
【数据分析-随到随学】SPSS调查问卷统计分析
-
必须开喷:GitHub上的《程序猿考公指南》文章
-
python办公自动化技巧
-
IDEA连接数据库失败:Server returns invalid timezone. Need to set ‘serverTimezone‘ property.
-
反应过程vghtet.zip
-
【数据分析-随到随学】Mysql数据库