数据分片概述、环境准备、部署MyCAT服务、全局表、分片表、ER表

Top

NSD DBA DAY08

  1. 案例1:部署mycat服务
  2. 案例2:测试配置

1 案例1:部署mycat服务

1.1 问题

  1. 把主机mysql60 配置为 MySQL59 的从服务器
  2. 把主机mysql62 配置为 MySQL61 的从服务器
  3. 把主机mycat63 配置为mycat服务器
  4. 客户端192.168.88.50访问mycat服务

1.2 方案

准备6台虚拟机,具体配置如表-1

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:把MySQL60配置为MySQL59的从服务器

1)配置主服务器MySQL59

  1. //启用binlog日志
  2. root@mysql59 \~\]# yum --y install mysql-server mysql

  3. root@mysql59 \~\]# vim /etc/my.cnf.d/mysql-server.cnf

  4. server-id=59
  5. log-bin=mysql59
  6. :wq
  7. root@mysql59 \~\]# systemctl restart mysqld

  8. root@mysql59 \~\]# mysql

  9. Query OK, 0 rows affected (0.11 sec)
  10. mysql> grant replication slave on *.* to repluser@"%"; 授予权限
  11. Query OK, 0 rows affected (0.09 sec)
  12. //查看日志信息
  13. mysql> show master status;
  14. +----------------+----------+--------------+------------------+-------------------+
  15. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  16. +----------------+----------+--------------+------------------+-------------------+
  17. | mysql59.000001 | 667 | | | |
  18. +----------------+----------+--------------+------------------+-------------------+
  19. 1 row in set (0.00 sec)

2)配置slave服务器MySQL60

复制代码
  1. //指定server-id 并重启数据库服务
  2. root@mysql60 \~\]# yum --y install mysql-serv er mysql

  3. root@mysql60 \~\]# vim /etc/my.cnf.d/mysql-server.cnf

  4. server-id=60
  5. :wq
  6. root@mysql60 \~\]# systemctl restart mysqld

  7. root@mysql60 \~\]# mysql

  8. Query OK, 0 rows affected, 8 warnings (0.34 sec)
  9. //启动slave进程
  10. mysql> start slave ;
  11. Query OK, 0 rows affected, 1 warning (0.04 sec)
  12. //查看状态信息
  13. mysql> show slave status \G
  14. *************************** 1. row ***************************
  15. Slave_IO_State: Waiting for source to send event
  16. Master_Host: 192.168.88.59
  17. Master_User: repluser
  18. Master_Port: 3306
  19. Connect_Retry: 60
  20. Master_Log_File: mysql59.000001
  21. Read_Master_Log_Pos: 667
  22. Relay_Log_File: mysql60-relay-bin.000002
  23. Relay_Log_Pos: 322
  24. Relay_Master_Log_File: mysql59.000001
  25. Slave_IO_Running: Yes //IO线程
  26. Slave_SQL_Running: Yes //SQL线程
  27. Replicate_Do_DB:
  28. Replicate_Ignore_DB:
  29. Replicate_Do_Table:
  30. Replicate_Ignore_Table:
  31. Replicate_Wild_Do_Table:
  32. Replicate_Wild_Ignore_Table:
  33. Last_Errno: 0
  34. Last_Error:
  35. Skip_Counter: 0
  36. Exec_Master_Log_Pos: 667
  37. Relay_Log_Space: 533
  38. Until_Condition: None
  39. Until_Log_File:
  40. Until_Log_Pos: 0
  41. Master_SSL_Allowed: No
  42. Master_SSL_CA_File:
  43. Master_SSL_CA_Path:
  44. Master_SSL_Cert:
  45. Master_SSL_Cipher:
  46. Master_SSL_Key:
  47. Seconds_Behind_Master: 0
  48. Master_SSL_Verify_Server_Cert: No
  49. Last_IO_Errno: 0
  50. Last_IO_Error:
  51. Last_SQL_Errno: 0
  52. Last_SQL_Error:
  53. Replicate_Ignore_Server_Ids:
  54. Master_Server_Id: 59
  55. Master_UUID: 38c02165-005e-11ee-bd2d-525400007271
  56. Master_Info_File: mysql.slave_master_info
  57. SQL_Delay: 0
  58. SQL_Remaining_Delay: NULL
  59. Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
  60. Master_Retry_Count: 86400
  61. Master_Bind:
  62. Last_IO_Error_Timestamp:
  63. Last_SQL_Error_Timestamp:
  64. Master_SSL_Crl:
  65. Master_SSL_Crlpath:
  66. Retrieved_Gtid_Set:
  67. Executed_Gtid_Set:
  68. Auto_Position: 0
  69. Replicate_Rewrite_DB:
  70. Channel_Name:
  71. Master_TLS_Version:
  72. Master_public_key_path:
  73. Get_master_public_key: 0
  74. Network_Namespace:
  75. 1 row in set, 1 warning (0.00 sec)
  76. mysql>

步骤二:把MySQL62配置为MySQL61的从服务器

1)配置主服务器MySQL61

复制代码
  1. //启用binlog日志
  2. root@mysql61 \~\]# yum --y install mysql-server mysql

  3. root@mysql61 \~\]# vim /etc/my.cnf.d/mysql-server.cnf

  4. server-id=61
  5. log-bin=mysql61
  6. :wq
  7. root@mysql61 \~\]# systemctl restart mysqld

  8. root@mysql61 \~\]# mysql

  9. Query OK, 0 rows affected (0.11 sec)
  10. mysql> grant replication slave on *.* to repluser@"%"; 授予权限
  11. Query OK, 0 rows affected (0.09 sec)
  12. //查看日志信息
  13. mysql> show master status;
  14. +----------------+----------+--------------+------------------+-------------------+
  15. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  16. +----------------+----------+--------------+------------------+-------------------+
  17. | mysql61.000001 | 667 | | | |
  18. +----------------+----------+--------------+------------------+-------------------+
  19. 1 row in set (0.00 sec)

2)配置slave服务器MySQL62

复制代码
  1. //指定server-id 并重启数据库服务
  2. root@mysql62 \~\]# yum --y install mysql-server mysql

  3. root@mysql62 \~\]# vim /etc/my.cnf.d/mysql-server.cnf

  4. server-id=62
  5. :wq
  6. root@mysql62 \~\]# systemctl restart mysqld

  7. root@mysql62 \~\]# mysql

  8. Query OK, 0 rows affected, 8 warnings (0.34 sec)
  9. //启动slave进程
  10. mysql> start slave ;
  11. Query OK, 0 rows affected, 1 warning (0.04 sec)
  12. //查看状态信息
  13. mysql> show slave status \G
  14. *************************** 1. row ***************************
  15. Slave_IO_State: Waiting for source to send event
  16. Master_Host: 192.168.88.61
  17. Master_User: repluser
  18. Master_Port: 3306
  19. Connect_Retry: 60
  20. Master_Log_File: mysql61.000001
  21. Read_Master_Log_Pos: 667
  22. Relay_Log_File: mysql62-relay-bin.000002
  23. Relay_Log_Pos: 322
  24. Relay_Master_Log_File: mysql61.000001
  25. Slave_IO_Running: Yes //IO线程
  26. Slave_SQL_Running: Yes //SQL线程
  27. Replicate_Do_DB:
  28. Replicate_Ignore_DB:
  29. Replicate_Do_Table:
  30. Replicate_Ignore_Table:
  31. Replicate_Wild_Do_Table:
  32. Replicate_Wild_Ignore_Table:
  33. Last_Errno: 0
  34. Last_Error:
  35. Skip_Counter: 0
  36. Exec_Master_Log_Pos: 667
  37. Relay_Log_Space: 533
  38. Until_Condition: None
  39. Until_Log_File:
  40. Until_Log_Pos: 0
  41. Master_SSL_Allowed: No
  42. Master_SSL_CA_File:
  43. Master_SSL_CA_Path:
  44. Master_SSL_Cert:
  45. Master_SSL_Cipher:
  46. Master_SSL_Key:
  47. Seconds_Behind_Master: 0
  48. Master_SSL_Verify_Server_Cert: No
  49. Last_IO_Errno: 0
  50. Last_IO_Error:
  51. Last_SQL_Errno: 0
  52. Last_SQL_Error:
  53. Replicate_Ignore_Server_Ids:
  54. Master_Server_Id: 61
  55. Master_UUID: 38c02165-005e-11ee-bd2d-525400007271
  56. Master_Info_File: mysql.slave_master_info
  57. SQL_Delay: 0
  58. SQL_Remaining_Delay: NULL
  59. Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
  60. Master_Retry_Count: 86400
  61. Master_Bind:
  62. Last_IO_Error_Timestamp:
  63. Last_SQL_Error_Timestamp:
  64. Master_SSL_Crl:
  65. Master_SSL_Crlpath:
  66. Retrieved_Gtid_Set:
  67. Executed_Gtid_Set:
  68. Auto_Position: 0
  69. Replicate_Rewrite_DB:
  70. Channel_Name:
  71. Master_TLS_Version:
  72. Master_public_key_path:
  73. Get_master_public_key: 0
  74. Network_Namespace:
  75. 1 row in set, 1 warning (0.00 sec)
  76. mysql>

步骤三:把主机mycat63配置为mycat服务器。

1)拷贝软件到mycat63主机

复制代码
  1. root@server1 \~\]# scp /linux-soft/s3/mycat2-1.21-release-jar-with-dependencies.jar [email protected]:/root/

2)安装mycat软件

复制代码
  1. //安装jdk
  2. root@mycat63 \~\]# yum -y install java-1.8.0-openjdk.x86_64

  3. root@mycat63 \~\]# which unzip \|\| yum -y install unzip

  4. root@mycat63 \~\]# mv mycat /usr/local/

  5. root@mycat63 \~\]# cp mycat2-1.21-release-jar-with-dependencies.jar /usr/local/mycat/lib/

  6. root@mycat63 \~\]# chmod -R 777 /usr/local/mycat/

复制代码
  1. root@mycat63 \~\]# vim /usr/local/mycat/conf/users/root.user.json

  2. "dialect":"mysql",
  3. "ip":null,
  4. "password":"654321",
  5. "transactionType":"proxy",
  6. "username":"mycat"
  7. }
  8. :wq
  1. 定义连接的数据库服务
复制代码
  1. root@mycat63 \~\]# vim /usr/local/mycat/conf/datasources/prototypeDs.data

  2. "dbType":"mysql",
  3. "idleTimeout":60000,
  4. "initSqls":[],
  5. "initSqlsGetConnection":true,
  6. "instanceType":"READ_WRITE",
  7. "maxCon":1000,
  8. "maxConnectTimeout":3000,
  9. "maxRetryCount":5,
  10. "minCon":1,
  11. "name":"prototypeDs",
  12. "password":"123456", 密码
  13. "type":"JDBC",
  14. "url":"jdbc:mysql://localhost:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", 连接本机的数据库服务
  15. "user":"plj", 用户名
  16. "weight":0
  17. }
  18. :wq

5)在mycat63主机运行数据库服务

复制代码
  1. root@mycat63 \~\]# yum -y install mysql-server mysql

  2. //创建plj用户
  3. root@mycat63 \~\]# mysql

  4. Query OK, 0 rows affected (0.05 sec)
  5. mysql> grant all on *.* to plj@"%" ; 授予权限
  6. Query OK, 0 rows affected (0.39 sec)
  7. mysql> exit
  8. Bye
  9. root@mycat63 \~\]#

复制代码
  1. root@mycat63 \~\]# /usr/local/mycat/bin/mycat help

  2. root@mycat63 \~\]# /usr/local/mycat/bin/mycat start

  3. //半分钟左右 能看到端口
  4. root@mycat63 \~\]# netstat -utnlp \| grep 8066

  5. root@mycat63 \~\]#

1)连接本机的mycat服务

复制代码
  1. root@mycat63 \~\]# mysql -h127.0.0.1 -P8066 -umycat -p654321

  2. +--------------------+
  3. | `Database` |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. +--------------------+
  9. 3 rows in set (0.11 sec)
  10. Mysql>

步骤五:添加数据源

1)连接本机的mycat服务,添加数据源

复制代码
  1. root@mycat63 \~\]# mysql -h127.0.0.1 -P8066 -umycat -p654321

  2. MySQL>/*+ mycat:createdatasource{
  3. "name":"dw0", "url":"jdbc:mysql://192.168.88.59:3306","user":"plj","password":"123456"}*/;
  4. //添加MySQL60
  5. Mysql>/*+ mycat:createdatasource{
  6. "name":"dr0", "url":"jdbc:mysql://192.168.88.60:3306","user":"plj","password":"123456"}*/;
  7. //添加MySQL61
  8. Mysql>/*+ mycat:createdatasource{
  9. "name":"dw1", "url":"jdbc:mysql://192.168.88.61:3306","user":"plj","password":"123456"}*/;
  10. //添加MySQL62
  11. Mysql>/*+ mycat:createdatasource{
  12. "name":"dr1", "url":"jdbc:mysql://192.168.88.62:3306","user":"plj","password":"123456"}*/;
  13. Mysql>

2)查看存放目录

复制代码
  1. root@mycat63 \~\]# ls /usr/local/mycat/conf/datasources/

3)查看数据信息

复制代码
  1. mysql> /*+mycat:showDataSources{}*/ \G
  2. *************************** 1. row ***************************
  3. NAME: dw0
  4. USERNAME: plj
  5. PASSWORD: 123456
  6. MAX_CON: 1000
  7. MIN_CON: 1
  8. EXIST_CON: 0
  9. USE_CON: 0
  10. MAX_RETRY_COUNT: 5
  11. MAX_CONNECT_TIMEOUT: 30000
  12. DB_TYPE: mysql
  13. URL: jdbc:mysql://192.168.88.59:3306?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
  14. WEIGHT: 0
  15. INIT_SQL:
  16. INIT_SQL_GET_CONNECTION: true
  17. INSTANCE_TYPE: READ_WRITE
  18. IDLE_TIMEOUT: 60000
  19. DRIVER: {
  20. CreateTime:"2023-05-08 16:10:26",
  21. ActiveCount:0,
  22. PoolingCount:0,
  23. CreateCount:0,
  24. DestroyCount:0,
  25. CloseCount:0,
  26. ConnectCount:0,
  27. Connections:[
  28. ]
  29. }
  30. TYPE: JDBC
  31. IS_MYSQL: true
  32. *************************** 2. row ***************************
  33. NAME: dw1
  34. USERNAME: plj
  35. PASSWORD: 123456
  36. MAX_CON: 1000
  37. MIN_CON: 1
  38. EXIST_CON: 0
  39. USE_CON: 0
  40. MAX_RETRY_COUNT: 5
  41. MAX_CONNECT_TIMEOUT: 30000
  42. DB_TYPE: mysql
  43. URL: jdbc:mysql://192.168.88.61:3306?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
  44. WEIGHT: 0
  45. INIT_SQL:
  46. INIT_SQL_GET_CONNECTION: true
  47. INSTANCE_TYPE: READ_WRITE
  48. IDLE_TIMEOUT: 60000
  49. DRIVER: {
  50. CreateTime:"2023-05-08 16:10:26",
  51. ActiveCount:0,
  52. PoolingCount:0,
  53. CreateCount:0,
  54. DestroyCount:0,
  55. CloseCount:0,
  56. ConnectCount:0,
  57. Connections:[
  58. ]
  59. }
  60. TYPE: JDBC
  61. IS_MYSQL: true
  62. *************************** 3. row ***************************
  63. NAME: dr0
  64. USERNAME: plj
  65. PASSWORD: 123456
  66. MAX_CON: 1000
  67. MIN_CON: 1
  68. EXIST_CON: 0
  69. USE_CON: 0
  70. MAX_RETRY_COUNT: 5
  71. MAX_CONNECT_TIMEOUT: 30000
  72. DB_TYPE: mysql
  73. URL: jdbc:mysql://192.168.88.61:3306?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
  74. WEIGHT: 0
  75. INIT_SQL:
  76. INIT_SQL_GET_CONNECTION: true
  77. INSTANCE_TYPE: READ_WRITE
  78. IDLE_TIMEOUT: 60000
  79. DRIVER: {
  80. CreateTime:"2023-05-08 16:10:26",
  81. ActiveCount:0,
  82. PoolingCount:0,
  83. CreateCount:0,
  84. DestroyCount:0,
  85. CloseCount:0,
  86. ConnectCount:0,
  87. Connections:[
  88. ]
  89. }
  90. TYPE: JDBC
  91. IS_MYSQL: true
  92. *************************** 4. row ***************************
  93. NAME: dr1
  94. USERNAME: plj
  95. PASSWORD: 123456
  96. MAX_CON: 1000
  97. MIN_CON: 1
  98. EXIST_CON: 0
  99. USE_CON: 0
  100. MAX_RETRY_COUNT: 5
  101. MAX_CONNECT_TIMEOUT: 30000
  102. DB_TYPE: mysql
  103. URL: jdbc:mysql://192.168.88.62:3306?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&autoReconnect=true
  104. WEIGHT: 0
  105. INIT_SQL:
  106. INIT_SQL_GET_CONNECTION: true
  107. INSTANCE_TYPE: READ_WRITE
  108. IDLE_TIMEOUT: 60000
  109. DRIVER: {
  110. CreateTime:"2023-05-08 16:10:26",
  111. ActiveCount:0,
  112. PoolingCount:0,
  113. CreateCount:0,
  114. DestroyCount:0,
  115. CloseCount:0,
  116. ConnectCount:0,
  117. Connections:[
  118. ]
  119. }
  120. TYPE: JDBC
  121. IS_MYSQL: true
  122. *************************** 5. row ***************************
  123. NAME: prototypeDs
  124. USERNAME: plj
  125. PASSWORD: 123456
  126. MAX_CON: 1000
  127. MIN_CON: 1
  128. EXIST_CON: 0
  129. USE_CON: 0
  130. MAX_RETRY_COUNT: 5
  131. MAX_CONNECT_TIMEOUT: 3000
  132. DB_TYPE: mysql
  133. URL: jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
  134. WEIGHT: 0
  135. INIT_SQL:
  136. INIT_SQL_GET_CONNECTION: true
  137. INSTANCE_TYPE: READ_WRITE
  138. IDLE_TIMEOUT: 60000
  139. DRIVER: {
  140. CreateTime:"2023-05-08 16:10:26",
  141. ActiveCount:0,
  142. PoolingCount:0,
  143. CreateCount:0,
  144. DestroyCount:0,
  145. CloseCount:0,
  146. ConnectCount:0,
  147. Connections:[
  148. ]
  149. }
  150. TYPE: JDBC
  151. IS_MYSQL: true
  152. 5 rows in set (0.07 sec)
  153. mysql>

步骤六:配置数据库服务器

1)在主服务器添加plj用户

复制代码
  1. root@mysql59 \~\]# mysql

  2. Mysql> grant all on *.* to plj@"%";
  3. root@mysql61 \~\]# mysql

  4. Mysql> grant all on *.* to plj@"%";

2)在从服务器查看用户是否同步

复制代码
  1. root@mysql60 \~\]# mysql -e 'select user from mysql.user where user="plj"'

  2. | user |
  3. +------+
  4. | plj |
  5. +------+
  6. root@mysql60 \~\]#

  7. root@mysql62 \~\]# mysql -e 'select user from mysql.user where user="plj"'

  8. | user |
  9. +------+
  10. | plj |
  11. +------+
  12. root@host62 \~\]#

1)连接本机的mycat服务,创建集群

复制代码
  1. root@mycat63 \~\]# mysql -h127.0.0.1 -P8066 -umycat -p654321

  2. mysql> /*!mycat:createcluster{"name":"c1","masters":["dw1"],"replicas":["dr1"]}*/;
  3. Mysql>

2)创建的集群保存在mycat安装目录下

复制代码
  1. root@MySQL63 \~\]# ls /usr/local/mycat/conf/clusters/

  2. root@mycat63 \~\]#

复制代码
  1. mysql> /*+ mycat:showClusters{}*/ \G
  2. *************************** 1. row ***************************
  3. NAME: prototype
  4. SWITCH_TYPE: SWITCH
  5. MAX_REQUEST_COUNT: 200
  6. TYPE: BALANCE_ALL
  7. WRITE_DS: prototypeDs
  8. READ_DS: prototypeDs
  9. WRITE_L: io.mycat.plug.loadBalance.BalanceRandom$1
  10. READ_L: io.mycat.plug.loadBalance.BalanceRandom$1
  11. AVAILABLE: true
  12. *************************** 2. row ***************************
  13. NAME: c0
  14. SWITCH_TYPE: SWITCH
  15. MAX_REQUEST_COUNT: 2000
  16. TYPE: BALANCE_ALL
  17. WRITE_DS: dw0
  18. READ_DS: dw0,dr0
  19. WRITE_L: io.mycat.plug.loadBalance.BalanceRandom$1
  20. READ_L: io.mycat.plug.loadBalance.BalanceRandom$1
  21. AVAILABLE: true
  22. *************************** 3. row ***************************
  23. NAME: c1
  24. SWITCH_TYPE: SWITCH
  25. MAX_REQUEST_COUNT: 2000
  26. TYPE: BALANCE_ALL
  27. WRITE_DS: dw1
  28. READ_DS: dw1,dr1
  29. WRITE_L: io.mycat.plug.loadBalance.BalanceRandom$1
  30. READ_L: io.mycat.plug.loadBalance.BalanceRandom$1
  31. AVAILABLE: true
  32. 3 rows in set (0.03 sec)
  33. mysql>

2 案例2:测试配置

2.1 问题

  • 练习全局表
  • 练习分片表
  • 练习ER表

2.2 方案

在客户端client50 连接mycat63 存储数据 ,验证mycat63的配置

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:练习全局表

全局表 数据会插入到两个库中,并且两个库中都有全部的数据。

复制代码
  1. //在mycat63 连接本机的mycat服务建库
  2. root@mycat63 \~\]# mysql -h127.0.0.1 -umycat -p654321 -P8066

  3. Query OK, 0 rows affected (0.31 sec)
  4. mysql> exit
  5. Bye
  6. root@mycat63 \~\]#

复制代码
  1. root@mycat63 \~\]# ls /usr/local/mycat/conf/schemas/tarena.schema.json

  2. root@mycat63 \~\]#

复制代码
  1. //客户端client50 连接mycat63主机的 建表存储数据
  2. root@client50 \~\]# mysql -h192.168.88.63 -umycat -p654321 -P8066

  3. Query OK, 0 rows affected (4.46 sec)
  4. //插入记录
  5. mysql> insert into tarena.dept values(1,"开发部"),(2,"运维部"),(3,"测试部");
  6. Query OK, 1 row affected (0.23 sec)
  7. //查看记录
  8. mysql> select * from tarena.dept;
  9. +---------+-----------+
  10. | dept_id | dept_name |
  11. +---------+-----------+
  12. | 1 | 开发部 |
  13. | 2 | 运维部 |
  14. | 3 | 测试部 |
  15. +---------+-----------+
  16. 3 rows in set (0.33 sec)
  17. mysql>

在4台数据库服务器查看

复制代码
  1. root@mysql59 \~\]# mysql -e 'select \* from tarena.dept'

  2. | dept_id | dept_name |
  3. +---------+-----------+
  4. | 1 | 开发部 |
  5. | 2 | 运维部 |
  6. | 3 | 测试部 |
  7. +---------+-----------+
  8. root@host61 \~\]#

  9. +---------+-----------+
  10. | dept_id | dept_name |
  11. +---------+-----------+
  12. | 1 | 开发部 |
  13. | 2 | 运维部 |
  14. | 3 | 测试部 |
  15. +---------+-----------+
  16. root@host62 \~\]#

  17. +---------+-----------+
  18. | dept_id | dept_name |
  19. +---------+-----------+
  20. | 1 | 开发部 |
  21. | 2 | 运维部 |
  22. | 3 | 测试部 |
  23. +---------+-----------+
  24. root@host63 \~\]#

  25. +---------+-----------+
  26. | dept_id | dept_name |
  27. +---------+-----------+
  28. | 1 | 开发部 |
  29. | 2 | 运维部 |
  30. | 3 | 测试部 |
  31. +---------+-----------+

步骤二:练习分片表

dbpartition 定义分库使用的分片规则,

tbpartition 定义分表使用的分片规则。

mod_hash 分片规则,用employee_id表头的值做取模计算

tbpartitions 1 表的分片数量

dbpartitions 2 库的分片数量

复制代码
  1. //连接mycat服务建表
  2. root@client50 \~\]# mysql -h192.168.88.63 -P8066 -umycat --p654321

  3. employee_id int primary key,
  4. name char(10),dept_id int ,
  5. mail varchar(30)
  6. ) default charset utf8
  7. dbpartition BY mod_hash(employee_id) tbpartition BY mod_hash(employee_id)
  8. tbpartitions 1 dbpartitions 2;

在4台数据库服务器查看表

复制代码
  1. root@mysql59 \~\]# mysql -e 'show databases'

  2. | Database |
  3. +--------------------+
  4. | information_schema |
  5. | mysql |
  6. | performance_schema |
  7. | sys |
  8. | tarena |
  9. | tarena_0 |
  10. +--------------------+
  11. root@mysql59 \~\]# mysql -e 'use tarena_0 ; show tables'

  12. | Tables_in_tarena_0 |
  13. +--------------------+
  14. | employees_0 |
  15. +--------------------+
  16. root@host61 \~\]#

  17. root@mysql60 \~\]# mysql -e 'show databases'

  18. | Database |
  19. +--------------------+
  20. | information_schema |
  21. | mysql |
  22. | performance_schema |
  23. | sys |
  24. | tarena |
  25. | tarena_0 |
  26. +--------------------+
  27. root@mysql60 \~\]# mysql -e 'use tarena_0 ; show tables'

  28. | Tables_in_tarena_0 |
  29. +--------------------+
  30. | employees_0 |
  31. +--------------------+
  32. root@host62 \~\]#

  33. root@mysql61 \~\]# mysql -e 'show databases'

  34. | Database |
  35. +--------------------+
  36. | information_schema |
  37. | mysql |
  38. | performance_schema |
  39. | sys |
  40. | tarena |
  41. | tarena_1 |
  42. +--------------------+
  43. root@mysql61 \~\]# mysql -e 'use tarena_1;show tables'

  44. | Tables_in_tarena_1 |
  45. +--------------------+
  46. | employees_1 |
  47. +--------------------+
  48. root@host63 \~\]#

  49. root@mysql62 \~\]# mysql -e 'show databases'

  50. | Database |
  51. +--------------------+
  52. | information_schema |
  53. | mysql |
  54. | performance_schema |
  55. | sys |
  56. | tarena |
  57. | tarena_1 |
  58. +--------------------+
  59. root@mysql62 \~\]# mysql -e 'use tarena_1;show tables'

  60. | Tables_in_tarena_1 |
  61. +--------------------+
  62. | employees_1 |
  63. +--------------------+
  64. root@host64 \~\]#

复制代码
  1. root@client50 \~\]# mysql -h192.168.88.63 -P8066 -umycat --p654321

  2. Query OK, 1 row affected (0.08 sec)
  3. mysql> insert into tarena.employees values (8,"B","3","[email protected]");
  4. Query OK, 1 row affected (0.13 sec)
  5. mysql> insert into tarena.employees values (7,"C","2","[email protected]");
  6. Query OK, 1 row affected (0.02 sec)
  7. mysql> insert into tarena.employees values (6,"C","2","[email protected]");
  8. Query OK, 1 row affected (0.06 sec)
  9. mysql> select * from tarena.employees;
  10. +-------------+------+---------+-----------+
  11. | employee_id | name | dept_id | mail |
  12. +-------------+------+---------+-----------+
  13. | 6 | C | 2 | [email protected] |
  14. | 8 | B | 3 | [email protected] |
  15. | 7 | C | 2 | [email protected] |
  16. | 9 | a | 1 | [email protected] |
  17. +-------------+------+---------+-----------+
  18. 4 rows in set (2.07 sec)

在数据库服务器本机查看数据

复制代码
  1. root@mysql59 \~\]# mysql -e 'select \* from tarena_0.employees_0'

  2. | employee_id | name | dept_id | mail |
  3. +-------------+------+---------+----------+
  4. | 6 | C | 2 | [email protected] |
  5. | 8 | B | 3 | [email protected] |
  6. +-------------+------+---------+----------+
  7. root@mysql59 \~\]#

  8. root@mysql60 \~\]# mysql -e 'select \* from tarena_0.employees_0'

  9. | employee_id | name | dept_id | mail |
  10. +-------------+------+---------+----------+
  11. | 6 | C | 2 | [email protected] |
  12. | 8 | B | 3 | [email protected] |
  13. +-------------+------+---------+----------+
  14. root@mysql60 \~\]#

  15. root@mysql61 \~\]# mysql -e 'select \* from tarena_1.employees_1'

  16. | employee_id | name | dept_id | mail |
  17. +-------------+------+---------+-----------+
  18. | 7 | C | 2 | [email protected] |
  19. | 9 | a | 1 | [email protected] |
  20. +-------------+------+---------+-----------+
  21. root@mysql61 \~\]#

  22. root@mysql62 \~\]# mysql -e 'select \* from tarena_1.employees_1'

  23. | employee_id | name | dept_id | mail |
  24. +-------------+------+---------+-----------+
  25. | 7 | C | 2 | [email protected] |
  26. | 9 | a | 1 | [email protected] |
  27. +-------------+------+---------+-----------+
  28. root@mysql62 \~\]#

ER表,称为关联表,表示数据逻辑上有关联性的两个或多个表,例如工资表和员工表。对于关联表,通常希望他们能够有相同的分片规则,这样在进行关联查询时,能够快速定位到同一个数据分片中。MyCat2中对于关联表,不需要有过多的声明,他可以根据分片规则自行判断。

1)连接mycat服务建表

复制代码
  1. root@client50 \~\]# mysql -h192.168.88.63 -P8066 -umycat --p654321

  2. employee_id int primary key,
  3. p_date date , basic int , bonus int
  4. ) DEFAULT CHARSET=utf8
  5. dbpartition BY mod_hash(employee_id)
  6. tbpartition BY mod_hash(employee_id) tbpartitions 1;
  7. Query OK, 1 row affected (1.93 sec)

2)在MyCat2终端查看关联表关系。

复制代码
  1. root@mycat63 \~\]# mysql -h127.0.0.1 -P8066 -umycat --p654321

  2. mysql> /*+ mycat:showErGroup{}*/ ;
  3. +---------+------------+-----------+
  4. | groupId | schemaName | tableName |
  5. +---------+------------+-----------+
  6. | 0 | tarena | employees |
  7. | 0 | tarena | salary |
  8. +---------+------------+-----------+
  9. 2 rows in set (0.00 sec)
  10. mysql>

3)在2台主服务器查看表

复制代码
  1. root@mysql59 \~\]# mysql -e 'use tarena_0 ; show tables'

  2. | Tables_in_tarena_0 |
  3. +--------------------+
  4. | employees_0 |
  5. | salary_0 |
  6. +--------------------+
  7. root@mysql59 \~\]#

  8. root@mysql61 \~\]# mysql -e 'use tarena_1;show tables'

  9. | Tables_in_tarena_1 |
  10. +--------------------+
  11. | employees_1 |
  12. | salary_1 |
  13. +--------------------+
  14. root@mysql61\~\]#

复制代码
  1. root@client50 \~\]# mysql -h192.168.88.63 -P8066 -umycat --p654321

  2. +-------------+------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------------+------+------+-----+---------+-------+
  5. | employee_id | int | NO | PRI | NULL | |
  6. | p_date | date | YES | | NULL | |
  7. | basic | int | YES | | NULL | |
  8. | bonus | int | YES | | NULL | |
  9. +-------------+------+------+-----+---------+-------+
  10. 4 rows in set (0.07 sec)
  11. mysql> insert into tarena.salary values(6,20230110,20000,2000);
  12. Query OK, 1 row affected (0.28 sec)
  13. mysql> insert into tarena.salary values(7,20230210,25000,2500);
  14. Query OK, 1 row affected (0.21 sec)
  15. mysql> insert into tarena.salary values(8,20230310,30000,3000);
  16. Query OK, 1 row affected (0.26 sec)
  17. mysql> insert into tarena.salary values(9,20230410,35000,3500);
  18. Query OK, 1 row affected (0.05 sec)
  19. mysql> select * from tarena.salary;
  20. +-------------+------------+-------+-------+
  21. | employee_id | p_date | basic | bonus |
  22. +-------------+------------+-------+-------+
  23. | 6 | 2023-01-10 | 20000 | 2000 |
  24. | 8 | 2023-03-10 | 30000 | 3000 |
  25. | 7 | 2023-02-10 | 25000 | 2500 |
  26. | 9 | 2023-04-10 | 35000 | 3500 |
  27. +-------------+------------+-------+-------+
  28. 4 rows in set (0.16 sec)
  29. mysql>

5)在4台数据库服务器本机查看

复制代码
  1. root@mysql59 \~\]# mysql -e 'select \* from tarena_0.employees_0'

  2. | employee_id | name | dept_id | mail |
  3. +-------------+------+---------+----------+
  4. | 6 | C | 2 | [email protected] |
  5. | 8 | B | 3 | [email protected] |
  6. +-------------+------+---------+----------+
  7. root@mysql59 \~\]#

  8. +-------------+------------+-------+-------+
  9. | employee_id | p_date | basic | bonus |
  10. +-------------+------------+-------+-------+
  11. | 6 | 2023-01-10 | 20000 | 2000 |
  12. | 8 | 2023-03-10 | 30000 | 3000 |
  13. +-------------+------------+-------+-------+
  14. root@mysql60 \~\]#

  15. root@mysql61 \~\]# mysql -e 'select \* from tarena_1.employees_1'

  16. | employee_id | name | dept_id | mail |
  17. +-------------+------+---------+-----------+
  18. | 7 | C | 2 | [email protected] |
  19. | 9 | a | 1 | [email protected] |
  20. +-------------+------+---------+-----------+
  21. root@mysql62 \~\]# mysql -e 'select \* from tarena_1.salary_1'

  22. | employee_id | p_date | basic | bonus |
  23. +-------------+------------+-------+-------+
  24. | 7 | 2023-02-10 | 25000 | 2500 |
  25. | 9 | 2023-04-10 | 35000 | 3500 |
  26. +-------------+------------+-------+-------+
  27. root@mysql62\~\]#

相关推荐
似霰13 分钟前
安卓adb shell串口基础指令
android·adb
fatiaozhang95272 小时前
中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包
android·adb·电视盒子·魔百盒刷机·魔百盒固件
CYRUS_STUDIO3 小时前
Android APP 热修复原理
android·app·hotfix
鸿蒙布道师4 小时前
鸿蒙NEXT开发通知工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
鸿蒙布道师4 小时前
鸿蒙NEXT开发网络相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
大耳猫4 小时前
【解决】Android Gradle Sync 报错 Could not read workspace metadata
android·gradle·android studio
ta叫我小白4 小时前
实现 Android 图片信息获取和 EXIF 坐标解析
android·exif·经纬度
dpxiaolong6 小时前
RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)
android·windows
tangweiguo030519877 小时前
Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案
android
老狼孩111227 小时前
2025新版懒人精灵零基础及各板块核心系统视频教程-全分辨率免ROOT自动化开发
android·机器人·自动化·lua·脚本开发·懒人精灵·免root开发