暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

第一次从MySQL 到 OceanBase数据库的数据离线同步

原创 angel 2022-06-05
3314

一、使用 mysqldump 将 mysql的表结构和数据同步到 OceanBase 的MySQL 租户中。

1.在MySQL中创建数据库:

[admin@dell angel ~\]$ mysql --version  # 查询MySQL版本号 mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86\_64) using readline 5.1

启动MYSQL:

systemctl start mariadb

连接MYSQL:mysql -uroot -p123 -P3306 -c -A -h 127.1

查看数据库:

创建数据库:create database if not exists lxs_db4;

打开数据库:use lxs_db4;

创建表:

CREATE TABLE `table4_lxs` (

`lxs_id` int(11) NOT NULL AUTO_INCREMENT,

`lxsname` varchar(50) NOT NULL,

PRIMARY KEY (`lxs_id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

MariaDB [lxs_db4]> show tables;

±------------------+

| Tables_in_lxs_db4 |

±------------------+

| table4_lxs        |

±------------------+

1 row in set (0.00 sec)

给表中插入数据:

MariaDB [lxs_db4]> insert into table4_lxs (lxs_id, lxsname) value(1, ‘angel’);

Query OK, 1 row affected (0.00 sec)

MariaDB [lxs_db4]> insert into table4_lxs (lxs_id, lxsname) value(2, ‘alice’);

Query OK, 1 row affected (0.00 sec)

MariaDB [lxs_db4]> select * from table4_lxs;

±-------±--------+

| lxs_id | lxsname |

±-------±--------+

|      1 | angel   |

|      2 | alice   |

±-------±--------+

2 rows in set (0.01 sec)

2.在MySQL数据库中导出表的结构和数据:

[admin@dell angel ~]$ mysqldump -uroot -p123 -P3306 -h127.1 -d lxs_db4 --compact>table4_lxs_ddl.sql

[admin@dell angel ~]$ mysqldump -uroot -p123 -P3306 -h127.1 -t lxs_db4 > table4_lxs_data.sql

[admin@dell angel ~]$ ll /home/admin/*.sql

-rw-rw-r–. 1 admin admin 1393 3月  23 04:38 /home/admin/table4_lxs_data.sql

-rw-rw-r–. 1 admin admin  353 3月  23 04:33 /home/admin/table4_lxs_ddl.sql

3.启动OB:

[admin@dell angel ~]$ cd /home/admin/oceanbase && bin/observer -i wlp1s0 -p 2881 -P 2882 -z zone1 -d /home/admin/oceanbase/store -r ‘192.168.43.196:2882:2881’ -c 20220221 -n obdemo -o “memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=50G,stack_size=1536K”

查看进程:

ps -ef|grep observer

监听:

netstat -ntlp

集群:

obclient -h 192.168.43.196 -P 2881 -uroot  -c -A

MySQL [(none)]> show databases;

±-------------------+

| Database           |

±-------------------+

| oceanbase          |

| information_schema |

| mysql              |

| SYS                |

| LBACSYS            |

| ORAAUDITOR         |

| test               |

±-------------------+

7 rows in set (0.010 sec)

MySQL [(none)]> exit

Bye

有OB数据库证明集群成功。

连接代理:cd ~/obproxy-3.2.0 && bin/obproxy -r “192.168.43.196:2881” -p 2883 -o “enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false” -c obdemo

查看进程:ps -ef|grep obproxy

监听:netstat -ntlp |grep obproxy

用代理登录OB:obclient -h 192.168.43.196 -u root@sys#obdemo -P 2883 -p123 -c -A oceanbase

MySQL [oceanbase]> show databases;

±-------------------+

| Database           |

±-------------------+

| oceanbase          |

| information_schema |

| mysql              |

| SYS                |

| LBACSYS            |

| ORAAUDITOR         |

| test               |

±-------------------+

7 rows in set (0.003 sec)

MySQL [oceanbase]> select * from __all_unit_config;

±---------------------------±---------------------------±---------------±----------------±--------±--------±-----------±-----------±---------±---------±--------------±--------------------+

| gmt_create                 | gmt_modified               | unit_config_id | name            | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num     |

±---------------------------±---------------------------±---------------±----------------±--------±--------±-----------±-----------±---------±---------±--------------±--------------------+

| 2022-03-20 14:17:38.179901 | 2022-03-20 14:17:38.179901 |              1 | sys_unit_config |       5 |     2.5 | 1610612736 | 1342177280 |    10000 |     5000 |   53687091200 | 9223372036854775807 |

| 2022-03-20 19:01:31.380284 | 2022-03-20 19:01:31.380284 |           1001 | lxs_unit1       |       1 |       1 | 1073741824 | 1073741824 |     1000 |     1000 |   10737418240 |               10000 |

±---------------------------±---------------------------±---------------±----------------±--------±--------±-----------±-----------±---------±---------±--------------±--------------------+

2 rows in set (0.015 sec)

MySQL [oceanbase]> select resource_pool_id, name from __all_resource_pool;

±-----------------±----------+

| resource_pool_id | name      |

±-----------------±----------+

|                1 | sys_pool  |

|             1001 | lxs_pool1 |

±-----------------±----------+

2 rows in set (0.004 sec)

MySQL [oceanbase]> select gmt_create,gmt_modified,tenant_id,tenant_name,replica_num,zone_list,primary_zone,info,locality,default_tablegroup_id,drop_tenant_time,status from __all_tenant;

±---------------------------±---------------------------±----------±------------±------------±----------±-------------±--------------±--------------±----------------------±-----------------±---------------------+

| gmt_create                 | gmt_modified               | tenant_id | tenant_name | replica_num | zone_list | primary_zone | info          | locality      | default_tablegroup_id | drop_tenant_time | status               |

±---------------------------±---------------------------±----------±------------±------------±----------±-------------±--------------±--------------±----------------------±-----------------±---------------------+

| 2022-03-20 14:17:38.200085 | 2022-03-20 14:17:38.200085 |         1 | sys         |          -1 | zone1     | zone1        | system tenant | FULL{1}@zone1 |                    -1 |               -1 | TENANT_STATUS_NORMAL |

| 2022-03-20 19:05:40.831319 | 2022-03-20 19:05:40.831319 |      1001 | lxs_tenant1 |          -1 | zone1     | RANDOM       |               | FULL{1}@zone1 |                    -1 |               -1 | TENANT_STATUS_NORMAL |

±---------------------------±---------------------------±----------±------------±------------±----------±-------------±--------------±--------------±----------------------±-----------------±---------------------+

2 rows in set (0.002 sec)

MySQL [oceanbase]> exit

Bye

设置白名单:

[admin@dell angel obproxy-3.2.0]$ obclient -h 192.168.43.196 -u root@sys#obdemo -P 2883 -p123 -c -A oceanbase

Welcome to the OceanBase.  Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.6.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)

Copyright © 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MySQL [oceanbase]> ALTER TENANT lxs_tenant1 SET VARIABLES ob_tcp_invited_nodes=’%’;

Query OK, 0 rows affected (0.011 sec)

MySQL [oceanbase]>

登录租户:

[admin@dell angel obproxy-3.2.0]$ obclient -h 192.168.43.196 -u root@lxs_tenant1 -P 2883  -c -A

Welcome to the OceanBase.  Commands end with ; or \g.

Your MySQL connection id is 8

Server version: 5.6.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)

Copyright © 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MySQL [(none)]> show databases;

±-------------------+

| Database           |

±-------------------+

| oceanbase          |

| information_schema |

| mysql              |

| test               |

| lxs_db             |

±-------------------+

5 rows in set (0.016 sec)

MySQL [(none)]> use lxs_db

Database changed

MySQL [lxs_db]> show tables;

Empty set (0.007 sec)

4.导入MYSQL数据库的表到OB中:

导入数据:

MySQL [lxs_db]> source /home/admin/table4_lxs_data.sql

Query OK, 0 rows affected (0.002 sec)

导入表结构:

MySQL [lxs_db]> source /home/admin/table4_lxs_ddl.sql

Query OK, 0 rows affected (0.001 sec)

MySQL [lxs_db]> show tables;

±-----------------+

| Tables_in_lxs_db |

±-----------------+

| table4_lxs       |

±-----------------+

1 row in set (0.002 sec)

MySQL [lxs_db]> select * from table4_lxs;

±-------±--------+

| lxs_id | lxsname |

±-------±--------+

|      1 | angel   |

|      2 | alice   |

±-------±--------+

2 rows in set (0.001 sec)

MySQL [lxs_db]>

MySQL [lxs_db]> select count(*) from table4_lxs;

±---------+

| count(*) |

±---------+

|        2 |

±---------+

1 row in set (0.017 sec)

MySQL [lxs_db]>

5.导入成功,踩过和坑:

a.mysqldump不支持SQL_NOTES,删除相关语句。

b.mysqldump不支持latin1,删除相关语句。

c.特别要注意创建表的语法格式!

如果查看DDL 文件中,直接指定了CHARSET=latin1,会导致导入数据时出现乱码,为了防止这种情况发生,可以在创建表格的时候做成这样的格式:

CREATE TABLE `table4_lxs` ( `lxs_id` int(11) NOT NULL AUTO_INCREMENT, `lxsname` varchar(50) NOT NULL, PRIMARY KEY (`lxs_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

后面在MySQL上建表的时候,可以先指定charset utf8,或者直接
把charset 删除掉也可以。

二、离线使用 datax 迁移 MySQL表的数据 到 OceanBase 用户的表中:

1.下载datax :

wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz # 下载 datax

tar -xf datax.tar.gz # 解压

find ./datax/plugin -name “.*” | xargs rm –f   # 删除datax中的隐藏文件

2.验证datax 的有效性:

sudo python /usr/local/datax/bin/datax.py …/job/job.json

验证成功!

3.编辑json文件:

{        "job": {               "content": \[{                      "reader": {                             "name": "mysqlreader",                             "parameter": {                                    "column": \[                                           "\*"                                    \],                                    "connection": \[{                                           "jdbcUrl": \["jdbc:mysql://127.0.0.1:3306/lxs\_db4?useUnicode=true&characterEncoding=utf8"\],                                           "table": \[                                                  "table4\_lxs"                                           \]                                    }\],                                    "password": "123",                                    "username": "root",                                    "where": ""                             }                      },                      "writer": {                             "name": "oceanbasev10writer",                             "parameter": {                                    "column": \[                                           "\*"                                    \],                                    "preSql": \[                                           "truncate table lxs\_table4"                                    \],                                    "connection": \[{                                           "jdbcUrl": "||\_dsc\_ob10\_dsc\_||obdemo:lxs\_tenant1||\_dsc\_ob10\_dsc\_||jdbc:oceanbase://192.168.43.196:2883/lxs\_db4",                                           "table": \[                                                  "lxs\_table4"                                           \]                                    }\],                                    "obWriteMode": "insert",                                    "password": "123",                                    "username": "root"                             }                      }               }\],               "setting": {                      "speed": {                             "channel": "4"                      }               }        } }

4.命令执行成功:

sudo python /usr/local/datax/bin/datax.py /usr/local/datax/job/table4 .json

5.踩过的坑:

  • datax执行时数据库及表的密码必须与json文件一致,否则无法执行成功。
给我点个赞
最后修改时间:2022-06-15 14:48:11
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论