mysql2psql
mysql2psql copied to clipboard
Turn your old MySQL database into PostgreSQL and try a new world of experience with it
Migrate Mysql db to Postgresql (by rules)
Migrate your current MySQL databases into Postgres in a single command.
This tool provides you the chance of migrate your local MySQL databases to Postgres and even modify your current database structure, names and achieve a better
consistence defining new foreign keys and cleaning up the data using _PRE_SQL queries.
How to use it
Mode1: Migrate a single database
$ python main.py {db_name}
Mode2: Migrate few tables from a single database
$ python main.py {db_name} [{table_name1} {table_name2} ..]
Mode3: Migrate your whole MySQL schema
$ python main.py all-databases
(it is recommended to use prefix from parameters.json, read more above)
Documentation
OS Dependences
Install pip
sudo apt-get install python-pip python-dev build-essential python-psycopg2 python-mysqldb libpq-dev libmysqlclient-dev
Environment dependences
Install python libraries and vendors
sudo bash ./bin/install_requirements.sh
Set it up for yourself
Step1: Set up db config
Set up your database configuration on ./config/parameters.json
mysql: Mysql connection valuespsql: Postgres connection valuesthreads: In case of 'all-databases', you can define the number of threads to run in parallel (Max. number of CPUs). Non parallel 0prefix: In case of 'all-databases', it filters every database which prefix is the defined here. Otherwise use falsev1_schema_name: If you want to migrate old schema onto a separated postgres schema, its name is defined here. Otherwise use false
Step2: Version schema names
Set up your schema names for version1 and version2 on "./config/parameters.json"
Step3: Define model rules you want to modified
- Open
./rules/schema_changes.json - Define your own schema rules on it. These rules are going to be used to redefine the new db structure, in case of not including any rules to a table or column, they will be migrated as it is in Mysql
Step4: Define Postgresql conversion rules from Mysql ones
- Open
./rules/mysql_to_psql.json - Define MySQL keys to Postgres, most of rules were already defined by default, but there might be some more missing
Step5: Define data convertion
- Open
./rules/mysql_raw_dump.json - Define data conversion according to its type, YOU might prefer to define different data conversion depending of your own model. Functions for conversion are defined in
dumperAuxFuncs.py, feel free to add your own customized ones.
========================
Outputs
These are the files generated during the migration process:
-
mysql_schema.json: Original Mysql schema exported in Json format -
mysql_schema_v2.json: Mysql schema after model rules where applied -
mysql_data.sql: INSERT INTO statement in mysql -
psql_schema.json: Postgres schema -
psql_tables.sql: CREATE TABLE statements, generated from psql_schema. -
psql_data.sql: INSERT INTO statements, generated from psql_schema. Raw data will be allocated under ./table folder
Manual migration
Mode1: Manually
Create tables
psql -h server -d database_name -U username < ./output/{databaase}/psql_tables.sql
Insert data
psql -h server -d database_name -U username < ./output/{databaase}/psql_data.sql
Insert indexes and fks
psql -h server -d database_name -U username < ./output/{databaase}/psql_index_fk.sql
Create views ( Just in case you want to keep views with previous squema)
psql -h server -d database_name -U username < ./output/{databaase}/psql_views.sql
Mode2: Single command
$ bash ./bin/migrate.sh [-p {port}] -U {username} -d {database} -Wf {password}