因为在分表的时候我们需要知道我们分的是第几个表,所以我们先需要初始化我们的分表号
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 35 | — 创建一个系统信息表为了记录下当前最大的分表号 DROP TABLE system_setting; CREATE TABLE system_setting( system_setting_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT ‘系统设置表ID’, name VARCHAR(45) NOT NULL COMMENT ‘系统设置项目名’, value VARCHAR(45) NOT NULL COMMENT ‘系统设置值’, PRIMARY KEY(system_setting_id) ); — 初始化当前最大分表号 INSERT INTO system_setting VALUES( NULL, ‘max_sharding_table_num’, 1); — 指定需要有哪些表需要分,为了下面分表时进行锁表 INSERT INTO system_setting VALUES( NULL, ‘sharding_table’, ‘sell_order’); INSERT INTO system_setting VALUES( NULL, ‘sharding_table’, ‘buy_order’); INSERT INTO system_setting VALUES( NULL, ‘sharding_table’, ‘goods’); INSERT INTO system_setting VALUES( NULL, ‘sharding_table’, ‘order_goods’); — 需要分表的表是通过什么字段来分表的 INSERT INTO system_setting VALUES( NULL, ‘sharding_sell_order_by’, ‘user_guide_id’); INSERT INTO system_setting VALUES( NULL, ‘sharding_buy_order_by’, ‘user_id’); INSERT INTO system_setting VALUES( NULL, ‘sharding_goods_by’, ‘store_id’); INSERT INTO system_setting VALUES( NULL, ‘sharding_order_goods_by’, ‘user_guide_id’); — 普通用户需要分那张表 INSERT INTO system_setting VALUES( NULL, ‘normal_user_sharding’, ‘buy_order’); — 导购需要分的表 INSERT INTO system_setting VALUES( NULL, ‘user_guide_sharding’, ‘buy_order’); INSERT INTO system_setting VALUES( NULL, ‘user_guide_sharding’, ‘sell_order’); INSERT INTO system_setting VALUES( NULL, ‘user_guide_sharding’, ‘order_goods’); — 店主需要分哪些表 INSERT INTO system_setting VALUES( NULL, ‘store_owner_sharding’, ‘buy_order’); INSERT INTO system_setting VALUES( NULL, ‘store_owner_sharding’, ‘sell_order’); INSERT INTO system_setting VALUES( NULL, ‘store_owner_sharding’, ‘order_goods’); INSERT INTO system_setting VALUES( NULL, ‘store_owner_sharding’, ‘goods’); |
1、我们的目标是实现能手动指定创建多少张表,并且能手动指定哪些用户到哪些表中。
2、最终能通过一定的算法,自动化这些分表迁移数据的工作。
在这里我们来实现 ‘1’ 手动指定, 以下可能比较枯燥都是代码了, 一般只要看主逻辑有一个思路,代码自己玩转它 ^_^
在附件中有完整的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | if __name__ == ‘__main__’ : # 设置默认的数据库链接参数 db _config = { ‘user’ : ‘root’ , ‘password’ : ‘root’ , ‘host’ : ‘127.0.0.1’ , ‘port’ : 3306 , ‘database’ : ‘test’ } sharding = ShardingTable ( ) # 设置数据库配置 sharding . set_db_config ( db_config ) # 初始化游标 sharding . get_conn_cursor ( ) # 提供需要分表的个数,创建分表 sharding . create_tables ( 9 ) # 指定用户迁移数据到指定表 sharding . move_data ( ‘username1’ , 2 ) sharding . move_data ( ‘username6’ , 6 ) sharding . move_data ( ‘username66’ , 9 ) |
上面我们指定新分9个表,并且迁移 ‘username1-店主’、’username6-导购’、’username66-普通用户’ 的数据到指定分表
完整的python代码:sharding_table.py MySQL分库分表(4)-脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | — 查看迁移后的数据-购买订单表 SELECT * FROM buy_order_2 LIMIT 0, 1; SELECT * FROM buy_order_6 LIMIT 0, 1; SELECT * FROM buy_order_9 LIMIT 0, 1; — 查看迁移后的数据-商品表 SELECT * FROM goods_2 LIMIT 0, 1; SELECT * FROM goods_6 LIMIT 0, 1; SELECT * FROM goods_9 LIMIT 0, 1; — 查看迁移后的数据-出售订单表 SELECT * FROM sell_order_2 LIMIT 0, 1; SELECT * FROM sell_order_6 LIMIT 0, 1; SELECT * FROM sell_order_9 LIMIT 0, 1; — 查看迁移后的数据-订单商品表 SELECT * FROM order_goods_2 LIMIT 0, 1; SELECT * FROM order_goods_6 LIMIT 0, 1; SELECT * FROM order_goods_9 LIMIT 0, 1; — 查看用户数据分布在哪个分表 table_flag SELECT * FROM user WHERE user_id IN(1, 6, 66); |
文章转载来自:trustauth.cn