首页云计算 正文

MySQL分库分表缩容(11)

2024-12-18 3 0条评论

此缩容非彼缩容

无论是在ORACLE、MSSQL中都会存在着扩容、缩容的操作,并且这个技能基本是DBA所必备的。下面是本人的一点理解:

  • 扩容:数据在增长,在快达到磁盘或数据库的容量时,增加磁盘和或表空间的一种操作。
  • 缩容:在delete、update、insert操作平凡的表中会产生许多的磁盘碎片,这是后需要对碎片进行整理或者对表数据进行从新生成一次,从而达到减小容量的目的。

而现在要说的扩容和缩容是结业某种业务场景的(其实就是分库分表的数据迁移):

  • 扩容:在预计访问会爆增之前。增加机器,并分库分表将数据进行迁移,让压力进行分散处理。从而能度过高频反问时期。
  • 缩容:在高频访问时期过去了,再将数据进行汇集。以至于能腾出机器,从而达到减少成本的一种做法。

扩容其实在之前分库分表的时候从操作过了。只是之前我们不知道那样就叫做扩容。

缩容

下面我们演示将test_3的库数据进行迁移

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 if __name__ == ‘__main__’ :    # 设置公共库配置    db_config_common = {      ‘user’      : ‘root’ ,      ‘password’ : ‘root’ ,      ‘host’      : ‘127.0.0.1’ ,      ‘port’      : 3306 ,      ‘database’ : ‘test’    }    sharding = ShardingDatabase ( )    # 设置公共数据库配置    sharding . get_conn_cursor ( db_config_common , ‘common’ )    # 获得数据存在test_3的用户    select_sql =     SELECT username FROM user where db_name = ‘ test _3   ‘    sharding . cursor_select_common . execute ( select_sql )    username_list = [ ]    for ( username , ) in sharding . cursor_select_common :      username_list . append ( username )    for username in username_list :      # 指定用户数据到 test_2库 表7      sharding . move_data ( username , ‘test_2’ , 7 )    # 删除库 test_3    drop_db_sql =     DROP DATABASE test_3   ‘    sharding . cursor_dml_common . execute ( drop_db_sql )

源码:reduce_capacity

查看迁移后数据:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 — 库test_3已经被删除 show databases; +——————–+ | Database            | +——————–+ | test                | | test_1              | | test_2              | +——————–+ — 在test_2库的用户数据 SELECT * FROM test. user WHERE db_name = ‘test_2’; +———+————+————+————+———+ | user_id | username    | password    | table_flag | db_name | +———+————+————+————+———+ |        3 | username3   | password3   |           7 | test_2   | |        7 | username7   | password7   |           3 | test_2   | |       55 | username55 | password55 |           6 | test_2   | +———+————+————+————+———+ SELECT * FROM buy_order_7 WHERE user_id = 3 LIMIT 0, 2; +———————+———+—————+——-+——–+ | buy_order_id         | user_id | user_guide_id | price | status | +———————+———+—————+——-+——–+ | 3794292612787081217 |        3 |              1 |   0.00 |       0 | | 3794292612803858433 |        3 |              1 |   0.00 |       0 | +———————+———+—————+——-+——–+ SELECT * FROM order_goods_7 WHERE sell_order_id = 3794292749739495425 LIMIT 0, 1; +———————+———————+———————+—————+——–+——+ | order_goods_id       | sell_order_id        | goods_id             | user_guide_id | price   | num   | +———————+———————+———————+—————+——–+——+ | 3794293053134475265 | 3794292749739495425 | 3794292588254597121 |              7 | 630.00 |     2 | +———————+———————+———————+—————+——–+——+

 

文章转载来自:trustauth.cn

文章版权及转载声明

本文作者:admin 网址:http://news.edns.com/post/217633.html 发布于 2024-12-18
文章转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码