ndbcluster 求助,报错table the tableis fulll

用户名:dingzhengchun12
访问量:656
注册日期:
阅读量:1297
阅读量:3317
阅读量:584131
阅读量:469403
51CTO推荐博文
Mysql cluster 安装配置手册目录系统简介.... 11. 安装系统.... 21.1 安装centOS6.4. 21.2 关闭SELINUX. 21.3 系统升级并删除旧内核... 21.4 开启防火墙相应端口... 21.5 安装编译工具... 31.6 安全更新... 31.7 软件安装环境设置... 31:设定系统目录... 31.1:软件存放目录... 31.2:软件下载路径... 31.8 ip 地址设置... 41:管理节点设置如下... 42:数据节点1设置如下:... 43:数据节点2设置如下:... 51.9 ntp 配置... 61:在管理节点上配置如下... 62:数据节点和sql节点上配置如下... 61.10 应用软件清单... 62. 应用程序安装配置.... 72.1服务端管理节点安装... 71:基础环境配置... 72:修改管理配置文件... 73:启动应用程序... 102.2数据节点和sql节点(172.16.10.115)安装... 111:基础环境安装... 112:安装应用程序... 113:启动应用程序... 123. 功能测试.... 133.1 数据复制功能... 131:登陆172.16.10.115. 132:登陆 172.16.10.116 查看数据是否完整复制... 133.2 增加新的节点... 131:修改管理节点的config.ini配置文件... 132:重启管理节点... 143:滚动重启旧的数据存储节点服务... 144:滚动重启所有的数据查询节点服务... 155:以初如化方式启动新增加的数据存储节点... 156:为新节点增加分组... 157:重新分配集群数据... 163.3数据节点故障切换... 171:模拟节点故障... 172:登陆管理台查看系统状态... 173:测试数据访问... 173.4 sql 节点均衡负载... 171:部署keepalived + LVS. 172:真实主机上配置添加启动脚本... 203.5 双管理节点设置... 221:修改管理节点配置文件... 222:复制配置文件... 223:轮流重启管理节点... 224:修改数据节点和sql节点配置文件... 225:轮流重启数据节点... 236:轮流重启sql节点... 233.6数据节点故障恢复... 231:安装应用软件... 232:复制mysql配置文件... 233: 启动数据节点程序... 244:创建需要的应用数据库... 243.7 创建磁盘表... 241:创建日志文件组... 242:创建表空间... 243:创建表使用磁盘表... 253.8删除表空间... 251:删除使用该表空间的表... 252:删除所有数据文件... 253:删除表空间... 26命令格式如下: mysql& DROP TABLESPACE ts_1 -& ENGINE NDBCLUSTER;264:查看表空间使用情况... 265:删除日志文件组... 263.9 MySQL簇的联机备份... 261:簇备份概念... 262:备份参数... 273:备份步骤... 284:要想放弃正在处理的备份... 295:如何恢复簇备份... 296:注意事项... 324.故障处理.... 324.1. 错误一... 324.2. 错误二... 331:修改数据节点Mysql的配置文件... 332:修改管理节点配置文件增大数据和索引大小... 333:增大表空间容量... 334.3.错误三... 344.4.错误四... 354.5.错误五... 354.6.错误六... 364.7.错误七... 364.8.错误八... 374.9.错误九... 37系统简介该系统应用mysql cluster gpl 版本安装,具有mysqlcluster的功能,其中包括数据复制,故障切换,应用数据备份等内容,结合keepalived +lvs 系统实现访问节点的负载均衡,可以对数据的告诉访问提供有效的支持。“NDB” 是一种“内存中”的,它具有可用性高和好的特点。MySQL Cluster 能够使用多种切换和选项配置NDB,但在 Cluster 级别上的存储引擎上做这个最简单。MySQL Cluster的NDB包含完整的数据集,仅取决于 Cluster本身内的其他数据。MySQL Cluster的 Cluster部分可独立于MySQL服务器进行配置。在MySQL Cluster中, Cluster的每个部分被视为1个节点。管理(MGM):这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令“ndb_mgmd”启动的。数据节点:这类节点用于保存 Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。不过没有必要设置多个副本。数据节点是用命令“ndbd”启动的。 SQL节点:这是用来访问 Cluster数据的节点。对于MySQL Cluster,节点是使用NDB Cluster的传统MySQL服务器。通常,SQL节点是使用命令“mysqldCndbcluster”启动的,或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启动。注释:在很多情况下,术语“”用于指计算机,但在讨论MySQL Cluster时,它表示的是进程。在单台计算机上可以有任意数目的节点,为此,我们采用术语“ Cluster”。1. 安装系统1.1 安装centOS6.4最小化安装的centOS6.4分别安装两台mysql cluster管理节点服务器、两台mysql cluster 数据节点服务器和sql节点服务器,sql节点和数据节点可以在一台机子上安装。1.2 关闭SELINUX#vi /etc/selinux/config & #SELINUX=enforcing & & #注释掉此项 & #SELINUXTYPE=targeted &#注释掉此项SELINUX=disabled
#增加关闭selinux & :wq &保存,关闭。 & #shutdown -r now重启系统1.3 系统升级并删除旧内核使用下列命令对系统进行强制升级yum -y update执行该命令查看已有的内核版本 & &#rpm -q kernel通过参数-e加上内核全名来删除想删除的内核版本 & &#rpm -e xxxxxxxx注意:删除就内核后需要重启系统,绿色字体为具体的版本号1.4 开启防火墙相应端口打开防火墙相应的端口#vi/etc/sysconfig/iptables在打开的文件中添加下面的内容(在22端口的下面添加)-A INPUT -m state --stateNEW -m tcp -p tcp --dport 3306 -j ACCEPT-A INPUT -m state --stateNEW -m tcp -p tcp --dport 1186 -j ACCEPT#开启3306和1186端口#/etc/init.d/iptablesrestart &#重启防火墙使配置生效1.5 安装编译工具对所有服务器安装编译工具,执行如下命令#rpm -e mysql-libs --nodeps#yum install wget &make gcc gcc-c++ zlib-devel opensslopenssl-devel pcre-devel gd &kernel keyutils &patch &perlpopt-static kernel-devel libnl* popt* &yum-security &ntp make cmake bison perl libaio python-paramiko.noarch1.6 安全更新系统稳定后定期对系统进行安全更新,命令如下:#yum --security check-update & &1.7 软件安装环境设置1:设定系统目录1.1:软件存放目录输入如下命令,让软件存储到此目录下/usr/local/src#cd /usr/local/src1.2:软件下载路径#wget #tar Cxvf MySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar1.8 ip 地址设置1:管理节点设置如下#vi /etc/sysconfig/network-scripts/ifcfg-eth0内容如下:DEVICE=eth0TYPE=EthernetUUID=f97bf9ed-e6ab-4243-adcb-d055a1fe33f1ONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=noneHWADDR=00:0C:29:EC:D6:21IPADDR=172.16.10.117PREFIX=24GATEWAY=172.16.10.254DNS1=8.8.8.8DEFROUTE=yesIPV4_FAILURE_FATAL=yesIPV6INIT=noNAME="System eth0"#service network restart2:数据节点1设置如下:#vi /etc/sysconfig/network-scripts/ifcfg-eth0内容如下:DEVICE=eth0TYPE=EthernetUUID=f97bf9ed-e6ab-4243-adcb-d055a1fe33f1ONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=noneHWADDR=00:0C:29:EC:D6:21IPADDR=172.16.10.115PREFIX=24GATEWAY=172.16.10.254DNS1=8.8.8.8DEFROUTE=yesIPV4_FAILURE_FATAL=yesIPV6INIT=noNAME="System eth0"#service network restart3:数据节点2设置如下:#vi /etc/sysconfig/network-scripts/ifcfg-eth0内容如下:DEVICE=eth0TYPE=EthernetUUID=f97bf9ed-e6ab-4243-adcb-d055a1fe33f1ONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=noneHWADDR=00:0C:29:EC:D6:21IPADDR=172.16.10.116PREFIX=24GATEWAY=172.16.10.254DNS1=8.8.8.8DEFROUTE=yesIPV4_FAILURE_FATAL=yesIPV6INIT=noNAME="System eth0"#service network restart1.9 ntp 配置1:在管理节点上配置如下#vi /etc/ntp.conf添加一下内容:restrict 172.16.10.0 mask 255.255.255.0 nomodifynotrap保存退出后,重启ntp服务#service ntpd restart#chkconfig ntpd on2:数据节点和sql节点上配置如下#vi /etc/ntp.conf注释掉一下内容:#server 0.centos.pool.ntp.org iburst#server 1.centos.pool.ntp.org iburst#server 2.centos.pool.ntp.org iburst#server 3.centos.pool.ntp.org iburst增加下面一行server 172.16.10.117#service ntpd restart#chkconfig ntpd on1.10 应用软件清单操作系统:centos6.4 64bit数据库软件:MySQL-Cluster-client-gpl-7.3.3-1.el6.x86_64.rpmMySQL-Cluster-devel-gpl-7.3.3-1.el6.x86_64.rpmMySQL-Cluster-server-gpl-7.3.3-1.el6.x86_64.rpmKeepalived 软件:keepalived-1.1.17.tar.gzLvs软件:ipvsadm-1.24.tar.gz2. 应用程序安装配置2.1服务端管理节点安装1:基础环境配置#rpm -e mysql-libs --nodeps#yum -y install make cmake bison#yum -y install perl libaio#yum -yinstall python-paramiko.noarch#cd /usr/local/src#wget /archives/get/file/MySQL-Cluster-server-gpl-7.3.3-1.el6.x86_64.rpm#yum -y localinstall &MySQL-Cluster-server-gpl-7.3.3-1.el6.x86_64.rpm2:修改管理配置文件#mkdir /var/lib/mysql-cluster#vi /var/lib/mysql-cluster/config.ini内容如下:## Configuration file for MyCluster#[NDB_MGMD DEFAULT]Portnumber=1186[NDB_MGMD]NodeId=46HostName=172.16.10.117DataDir=/var/lib/mysql-cluster/Portnumber=1186[TCP DEFAULT]SendBufferMemory=4MReceiveBufferMemory=4M[NDBD DEFAULT]BackupMaxWriteSize=1MBackupDataBufferSize=16MBackupLogBufferSize=4MBackupMemory=20MBackupReportFrequency=10MemReportFrequency=30LogLevelStartup=15LogLevelShutdown=15LogLevelCheckpoint=8LogLevelNodeRestart=15DataMemory=8MIndexMemory=4MMaxNoOfTables=4096MaxNoOfOrderedIndexes=4096MaxNoOfTriggers=3500NoOfReplicas=2StringMemory=25DiskPageBufferMemory=256MSharedGlobalMemory=96MLongMessageBuffer=32MMaxNoOfConcurrentTransactions=16384BatchSizePerLocalScan=512FragmentLogFileSize=64MNoOfFragmentLogFiles=16RedoBuffer=32MMaxNoOfExecutionThreads=2StopOnError=falseLockPagesInMainMemory=1TimeBetweenEpochsTimeout=32000TimeBetweenWatchdogCheckInitial=60000TransactionInactiveTimeout=60000HeartbeatIntervalDbDb=15000HeartbeatIntervalDbApi=15000MaxNoOfAttributes= 34760[NDBD]NodeId=1HostName=172.16.10.115DataDir=/var/lib/mysql/[NDBD]NodeId=2HostName=172.16.10.116DataDir=/var/lib/mysql/[MYSQLD DEFAULT][API]NodeId=50HostName=172.16.10.115[API]NodeId=51HostName=172.16.10.116[API][API]###############################################################################其中 172.16.10.117 为管理节点ip.172.16.10.115和172.16.10.116 为数据库节点ip.[API]用于表示Mysqld(API)节点的定义,空的[API]必须和现有API节点数一致。[NDBD]用于表示数据节点的定义。[NDB_MGMD]用于定义管理节点,多个管理节点的情况。需要分别用[NDB_MGMD]定义各个节点。SQL节点和数据节点定义的管理IP之间用,分割。注意区分大小写3:启动应用程序# /usr/sbin/ndb_mgmd -f/var/lib/mysql-cluster/config.ini#vi /etc/rc.local 加入一下内容:/usr/sbin/ndb_mgmd -f/var/lib/mysql-cluster/config.ini2.2数据节点和sql节点(172.16.10.115)安装1:基础环境安装#rpm -e mysql-libs# cd /usr/local/src/#wget /archives/get/file/MySQL-Cluster-client-gpl-7.3.3-1.el6.x86_64.rpm#wget &/archives/get/file/MySQL-Cluster-devel-gpl-7.3.3-1.el6.x86_64.rpm#wget /archives/get/file/MySQL-Cluster-server-gpl-7.3.3-1.el6.x86_64.rpm2:安装应用程序#yum -y localinstallMySQL-Cluster-*#vi /f内容如下:[mysql_cluster]ndb-connectstring="172.16.10.117:1186"[mysqld]ndbclusterndb-connectstring="172.16.10.117:1186"datadir=/var/lib/mysqlport=3306###############################################################################其中172.16.10.117 为管理节点ip。注意格式。在ip地址和端口上要加“号。3:启动应用程序#/etc/init.d/mysql restart#chkconfig mysql on#ndbmtd --initial & & & & & & &#第一次启动的时候使用(仅限第一次使用和备份恢复数据时使用,以后不能使用该命令,否则会丢失所有数据)#ndbmtd & & & & & & & & & & & & & & & & & #以后启动数据节点,使用该命令#vi /etc/rc.local加入一下内容:/usr/sbin/ndbmtd172.16.10.116 安装方法和172.16.10.115 安装方法一样。登陆管理端#ndb_mgm ndb_mgm& show出现一下内容表示连接正常650) this.width=650;" width="516" height="170" src="/e/u/themes/default/images/spacer.gif" style="background:url(&/e/u/lang/zh-cn/images/localimage.png&) no-border:1px solid #" alt="spacer.gif" />3. 功能测试3.1 数据复制功能1:登陆172.16.10.115#mysql -uroot -p mysql&crmysql&use hahahamysql&create table ddd(id int) engine=mysql&insert into ddd valuez(1)注意在节点上创建表时,表的引擎为ndbcluster。2:登陆 172.16.10.116 查看数据是否完整复制#mysql Curoot CpMysql&Mysql&select *3.2 增加新的节点注意:增加或减少数据节点的数量和NoOfReplicas(即副本数,通过管理节点的config.ini配置文件来设置)有关,一般来说NoOfReplicas是2,那么增加或减少的数量也应该是成对的,否则要设置另外的NoOfReplicas。首先必须确保新加入的数据节点作为新的group加入,默认2个node为1个group,Group数量=Node总数/NoOfReplicas数。1:修改管理节点的config.ini配置文件添加如下一段:[NDBD]NodeId=6HostName= 172.16.10.118Datadir=/var/lib/mysql [NDBD]NodeId=7HostName= 172.16.10.119Datadir=/var/lib/mysql这里的Id不能跟已有的Id重复2:重启管理节点用reload方式启动管理节点执行ndb_mgm进入管理命令界面找到管理节点的id,然后执行管理节点id stop,退出 [root@sg204mysql-cluster]# libexec/ndb_mgmd -f /opt/mysql-cluster/etc/config.ini --reload & #加上reload参数,使得修改过的config.ini生效启动成功后用show查看,可以看到新加入的数据节点,并且处于未连接状态。3:滚动重启旧的数据存储节点服务(滚动重启,不能所有节点同时重启,如果同时停止,数据库前端查询就会出现错误)ndb_mgm& 2 RESTARTNode 2: Node shutdown initiatedNode 2: Node shutdown completed, restarting, no start.Node 2 is being restartedndb_mgm& Node 2: Start initiated (version 7.1.19)Node 2: Started (version 7.1.19)ndb_mgm& 3 RESTARTNode 3: Node shutdown initiatedNode 3: Node shutdown completed, restarting, no start.Node 3 is being restartedndb_mgm& Node 3: Start initiated (version 7.1.19)ndb_mgm& Node 3: Started (version 7.1.19)4:滚动重启所有的数据查询节点服务[root@sg204 mysql-cluster]#bin/mysqladmin-uroot -ppassword shutdown[root@sg204 mysql-cluster]# mysqld_safe--console --ndbcluster --ndb-connectstring=172.16.10.1175:以初如化方式启动新增加的数据存储节点[root@sg204 mysql-cluster]#ndbd Cc 172.16.10.117
--initial启动后在管理节点上用show命令查看可以看到新加入的节点已经启动并处于未分组状态id=3 @172.16.10.118 ((mysql-5.6.14 ndb-7.3.3, nonodegroup)id=4 @172.16.10.119 ((mysql-5.6.14 ndb-7.3.3, no nodegroup)6:为新节点增加分组在管理节点上ndb_mgm下输入以下命令:ndb_mgm& create nodegroup 3,4这时在管理节点上show,可以看到新节点已经分组。ndb_mgm& showConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 4 node(s)id=1 @172.16.10.115 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, Master)id=2 @172.16.10.116 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0)id=3 @172.16.10.117 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 1)id=4 @172.16.10.118 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 1)[ndb_mgmd(MGM)] 1 node(s)id=49 @172.16.10.117 (mysql-5.6.14 ndb-7.3.3)[mysqld(API)] 4 node(s)id=4 @172.16.10.115 (mysql-5.6.14 ndb-7.3.3)id=5 @172.16.10.116 (mysql-5.6.14 ndb-7.3.3)id=8 @172.16.10.117 (mysql-5.6.14 ndb-7.3.3)id=9 @172.16.10.118 (mysql-5.6.14 ndb-7.3.3)7:重新分配集群数据登陆任意sql客户端连接数据库#mysql Curoot -pMysql&SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE = 'NDBCLUSTER';Mysql&ALTER ONLINE TABLE table_name REORGANIZEPARTITION;Mysql &OPTIMIZE TABLE table_然后通过show命令或者使用ndb_desc命令查看ndb_desc -c 172.16.10.117 -d tuge datasource -p-c后面跟管理节点的ip,-d跟数据库的名字,datasource为表名,-p输出分区的详细信息迁移之后空间还没有释放出来,需要通过optimize命令优化表,释放迁移走的空间(当optimize一个ndb大表的时候很慢,很容易出问题)3.3数据节点故障切换1:模拟节点故障登陆数据节点服务器,使用一下命令结束掉进程# pkill -9 ndbmtd2:登陆管理台查看系统状态Ndb_mgm&show如下图状态所示650) this.width=650;" width="554" height="83" src="/e/u/themes/default/images/spacer.gif" style="background:url(&/e/u/lang/zh-cn/images/localimage.png&) no-border:1px solid #" alt="spacer.gif" />3:测试数据访问登陆sql节点连接数据库# mysql Curoot Cp 查看数据是否完整。Mysql&select count(*) &from table_查看数据插入是否正常。Mysql&insert into table_name values();3.4 sql 节点均衡负载1:部署keepalived + LVS在管理节点上部署keepalived+lvs。配置过程参考keepalived+lvs 安装文档Keeplived 配置文件示例是如下图! Configuration File for keepalivedglobal_defs { &notification_email { & & & & & & & & & & & &#定义了发送报警的email & &acassen@firewall.loc & &failover@firewall.loc & &sysadmin@firewall.loc & } &notification_email_from Alexandre.Cassen@firewall.loc &smtp_server 192.168.200.1 &smtp_connect_timeout 30 &router_id LVS_DEVEL & & & & & & & & & #定义了vrrp router的ID,主备需要一致}vrrp_instance VI_81 { & &stateMASTER#备份服务器上将MASTER改为BACKUP & interface eth0 & & & & & & & & & & & & & & &#keepalive检测的网络接口 & virtual_router_id 81 & & & & & & & #主、备机的virtual_router_id必须相同 & priority 100 & & & & & & & & & &#主、备机取不同的优先级,主机 & 备份机 & advert_int 1 & & & & #VRRPMulticast广播周期秒数 & authentication { & & & auth_type PASS & & &#VRRP认证方式 & & & auth_pass 1111 & & & #VRRP口令字 & &} & virtual_ipaddress { & & & &172.16.10.119#(这里写用于服务的VIP,这些VIP不会被用于keepalived检测状态)# & & & 192.168.200.17# & & & 192.168.200.18 & &}}virtual_server 172.16.10.119 3306 { & & & & & &# 定义用于服务的virtual_server & delay_loop 6 & & & & & & & & & & & & & & & #每隔2秒查询realserver状态 & lb_algo wrr & & & & & & & & & & & & & & & & & & & &#LVS调度算法为Round Robin & lb_kind DR & & & & & & & & & & & & & & & & &#LVS工作模式为Direct Route & nat_mask 255.255.255.0 & persistence_timeout 50 & protocol TCP & real_server 172.16.10.116 3306 { & & & & &#定义Real Server & & & weight 1 & & & & & & & & & & & & & & & & & & & #RealServer的权重 & & & TCP_CHECK { & & & & & connect_timeout 3 & &#连接超时时间 & & & & & nb_get_retry 3 & & & & &#重试次数 & & & & & delay_before_retry 3 #延迟时间 & & & &} & &} & real_server 172.16.10.116 3306 { & & & weight 1 & & & TCP_CHECK { & & & & & connect_timeout 3 & & & & & nb_get_retry 3 & & & & & delay_before_retry 3 & & & &} & &}}2:真实主机上配置添加启动脚本# vi /bin/lvs_DR.sh 内容如下#!/bin/bash # Writtenby NetSeek #description: Config realserver lo and apply noarp WEB_VIP=192.168.2.3 ./etc/rc.d/init.d/functions case"$1" in start) & & & ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP#在回环接口上添加ip为虚拟ip的主机地址,广播地址为本身。 & & & /sbin/route add -host $WEB_VIP dev lo:0#为虚拟ip做一个主机路由 & & & echo "1" &/proc/sys/net/ipv4/conf/lo/arp_ignore & & & echo "2" &/proc/sys/net/ipv4/conf/lo/arp_announce & & & echo "1" &/proc/sys/net/ipv4/conf/all/arp_ignore & & & echo "2" &/proc/sys/net/ipv4/conf/all/arp_announce#将上面的参数设定为指定的值 & & & sysctl -p &/dev/null 2&&1 & & & echo "RealServer Start OK" & & & &;; stop) & & & ifconfig lo:0 down & & & route del $WEB_VIP &/dev/null 2&&1 & & & echo "0" &/proc/sys/net/ipv4/conf/lo/arp_ignore & & & echo "0" &/proc/sys/net/ipv4/conf/lo/arp_announce & & & echo "0" &/proc/sys/net/ipv4/conf/all/arp_ignore & & & echo "0" &/proc/sys/net/ipv4/conf/all/arp_announce & & & echo "RealServer Stoped" & & & &;; status) & & & & #Status of LVS-DR real server. & & & &islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP` & & & &isrothere=`netstat -rn | grep "lo:0" | grep $web_VIP` & & & &if [ ! "$islothere" -o ! "isrothere" ];then & & & & & &# Either the route or the lo:0 device & & & & & &# not found. & & & & & &echo "LVS-DR real server Stopped." & & & &else & & & & & &echo "LVS-DR Running." & & & &fi ;; *) & & & & #Invalid entry. & & & &echo "$0: Usage: $0 {start|status|stop}" & & & &exit 1 ;; esac exit 0# vi /etc/rc.local添加开机启动项:/bin/lvs_DR.sh start3.5双管理节点设置ndb 管理节点提供热备1:修改管理节点配置文件#vi /var/lib/mysql-cluster/config.ini在[NDB_MGMD] 段的上方。增加新的[NDB_MGMD]段内容如下: [NDB_MGMD]NodeId=48 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &#新节点id为48,老的节点ip为49HostName=172.16.10.21 & & & & & & & & & & & & & & & & & & & & & & & &#新管理节点ipDataDir=/var/lib/mysql-cluster/Portnumber=1186注意NodeId 不要和现有的NodeId冲突2:复制配置文件登陆新增加的管理节点将原有管理节点上的配置文件,复制到新管理节点/var/lib/mysql-cluster3:轮流重启管理节点登陆管理节点1,进行重启#pkill -9 ndb_mgmd#ndb_mgmd Cf /var/lib/mysql-cluster/config.ini &--reload登陆管理节点2,进行重启#pkill -9 ndb_mgmd#ndb_mgmd Cf/var/lib/mysql-cluster/config.ini --reload4:修改数据节点和sql节点配置文件#vi /f修改内容如下:[mysql_cluster]ndb-connectstring="172.16.10.117:1186","172.16.10.21:1186"[mysqld]ndbclusterndb-connectstring="172.16.10.117:1186","172.16.10.21:1186"datadir=/var/lib/mysqlport=33065:轮流重启数据节点登陆数据节点1,进行重启#pkill &-9 ndbmtd#ndbmtd 登陆数据节点2,进行重启#pkill &-9ndbmtd#ndbmtd 6:轮流重启sql节点登陆sql节点1,进行重启#/etc/init.d/mysql restart登陆sql节点2,进行重启#/etc/init.d/mysql restart3.6数据节点故障恢复1:安装应用软件#yum Cy install MySQL-Cluster-server-*MySQL-Cluster-client-* MySQL-Cluster-devel-*2:复制mysql配置文件复制其他节点的配置文件</f到/etc/目录下3:启动数据节点程序执行一下命令#ndbmtd Cinitial#/etc/init.d/mysql start4:创建需要的应用数据库#mysql Curoot CpMysql&create database ‘数据库名’3.7 创建磁盘表1:创建日志文件组执行一下命令:#mysql Curoot Cp Mysql& CREATE LOGFILEGROUP lg_2ADD UNDOFILE 'undo_2.log'INITIAL_SIZE 1024MUNDO_BUFFER_SIZE 128MENGINE NDBCLUSTER;2:创建表空间执行一下命令#mysql Curoot Cp Mysql& CREATE TABLESPACE ts_2 & &ADDDATAFILE 'data_2.dat' &USE LOGFILE GROUP lg_2 &INITIAL_SIZE 409600M ENGINENDBCLUSTER;3:创建表使用磁盘表命令行格式如下#mysql Curoot CpMysql&CREATE TABLE (id int …….)TABLESPACE ts_2STORAGE DISK ENGINE=NDBCLUSTER;3.8删除表空间删除日志文件组或者表空间的时候需要按顺序删除,只有在无表使用数据文件的时候才能删除数据文件操作顺序:1:删除使用该表空间的表执行一下命令: mysql&DROP TABLE dt_1;2:删除所有数据文件命令格式如下:mysql& ALTER TABLESPACE ts_1DROP DATAFILE 'data_2.dat'ENGINE NDBCLUSTER;mysql& ALTER TABLESPACE ts_1 DROP DATAFILE 'data_1.dat' ENGINE NDBCLUSTER;3:删除表空间命令格式如下:mysql& DROP TABLESPACE ts_1-& ENGINE NDBCLUSTER;4:查看表空间使用情况命令格式如下:Mysql&SELECT TABLESPACE_NAME, FILE_NAME,EXTENT_SIZE*TOTAL_EXTENTS/ AS TOTAL_MB,EXTENT_SIZE*FREE_EXTENTS/ AS FREE_MB, EXTRA FROMinformation_schema.FILES WHERE FILE_TYPE="DATAFILE";5:删除日志文件组说明:只有使用UNDO logfile group的表空间都删除情况下才能删除undo logfile group操作语法:mysql& DROP LOGFILE GROUP lg_1ENGINE NDBCLUSTER;查看undo日志文件使用量信息mysql&select * from ndbinfo.logspaces wherelog_type='DD-UNDO';mysql&SELECT FILE_NAME, LOGFILE_GROUP_NUMBER,EXTRA & & FROMINFORMATION_SCHEMA.FILES &WHERELOGFILE_GROUP_NAME = 'lg_2';3.9 MySQL簇的联机备份1:簇备份概念备份指的是在给定时间对数据库的快照。备份包含三个主要部分:(1)Metadata(元数据):所有数据库表的名称和定义。(2)Table records(表记录):执行备份时实际保存在数据库表中的数据。(3)Transaction log(事务日志):指明如何以及何时将数据保存在数据库中的连续记录。每一部分(这三部分)均会保存在参与备份的所有数据节点上。在备份过程中,每个节点均会将这三个部分保存在磁盘上的三个文件中(意思是说,有几个节点,将会把相同的数据,保存几份.例如,2个数据节点,那么就会分别在2个节点上,保存2次,保存目录默认为[NDBD]DateDir=/usr/local/mysql/BACKUP(4)BACKUP-backup_id.node_id.ctl 包含控制信息和元数据的控制文件。每个节点均会将相同的表定义(对于簇中的所有表)保存在自己的该文件中(5)BACKUP-backup_id-0.node_id.data 包含表记录的数据文件,它是按片段保存的,也就是说,在备份过程中,不同的节点会保存不同的片段。每个节点保存的文件以指明了记录所属表的标题开始。在记录清单后面有一个包含关于所有记录校验和的脚注。(6)BACKUP-backup_id.node_id.log 包含已提交事务的记录的日志文件。在日志中,仅保存已在备份中保存的表上的事务。参与备份的节点将保存不同的记录,这是因为,不同的节点容纳了不同的数据库片段。在上面所列的内容中,backup_id指的是备份ID,node_id是创建文件的节点的唯一ID。使用管理服务器创建备份开始备份前,请确保已为备份操作恰当地配置了簇。2:备份参数(以下参数,都写入在mgmd的config.ini配置文件中)本节讨论的参数定义了与在线备份执行有关的内存缓冲集。(1)BackupDataBufferSize 在创建备份的过程中,为了将数据发送到磁盘,将使用两类缓冲。备份数据缓冲用于填充由扫描节点的表而记录的数据。一旦将该缓冲填充到了指定的水平BackupWriteSize(请参见下面的介绍),就会将页发送至磁盘。在将页写入磁盘的同时,备份进程能够继续填充该缓冲,直至其空间消耗完为止。出现该情况时,备份进程将暂停扫描,直至一些磁盘写入操作完成并释放了内存为止,然后扫描继续。该参数的默认值为2MB。(2)BackupLogBufferSize 备份日志缓冲扮演的角色类似于备份数据缓冲,不同之处在于,它用于生成备份执行期间进行的所有表写入的日志。相同的原理也适用于备份数据缓冲情形下的页写入,不同之处在于,当备份日志缓冲中没有多余空间时,备份将失败。出于该原因,备份日志缓冲的大小应足以处理执行备份时产生的负载。该参数的默认值对于大多数应用程序均是适当的。事实上,备份失败的原因更可能是因为磁盘写入速度不够,而不是备份日志缓冲变满。如果没有为应用程序产生的写负载配置磁盘子系统,簇很可能无法执行所需的操作。最好按恰当的方式配置簇,使得处理器成为瓶颈而不是磁盘或网络连接。默认值是2MB。(3)BackupMemory 该参数是BackupDataBufferSize和BackupLogBufferSize之和。默认值是2MB + 2MB = 4MB。(4)BackupWriteSize 该参数指定了由备份日志缓冲和备份数据缓冲写入磁盘的消息大小。默认值是32KB. (5)BackupDataDir #可更改默认的备份目录,BackupDataDir=/mysqlback#当然前提,mkdir /mysqlback ,需要在所有数据节点上运行也能指定存放备份的目录。默认情况下,该目录是FileSystemPath/BACKUP(6)FileSystemPath 该参数指定了存放为元数据创建的所有文件、REDO日志、UNDO日志和数据文件的目录。默认目录是由DataDir指定的。注意,启动ndbd进程之前,该目录必须已存在。(7)DataDir 该参数指定了存放跟踪文件、日志文件、pid文件以及错误日志的目录。3:备份步骤使用管理服务器创建备份包含以下步骤:1)启动管理服务器(ndb_mgm)2)执行命令START BACKUP3)管理服务器将用消息“指示备份开始”作出应答。这意味着管理服务器将请求提交给了簇,但尚未收到任何回应。4)管理服务器回复“备份backup_id开始”,其中,backup_id是该备份的唯一ID(如果未作其他配置,该ID还将保存在簇日志中)。这意味着簇已收到并开始处理备份请求。它不表示备份已完成。5)管理服务器发出消息“备份backup_id完成”,通知备份操作已结束。如下图示例(其中2 表示备份id):#ndb_mgm& start backup 2;Waiting for completed, this may take severalminutesNode 1: Backup 2 started from node 49Node 1: Backup 2 started from node 49 completedStartGCP: 489 StopGCP: 492#Records: 2089 #LogRecords: 0Data: 52400 bytes Log: 0 bytesndb_mgm& Node 1: Started (version 7.3.3)Node 2: Started (version 7.3.3)上例中表示该备份实在节点node 49 这台机子上执行的,所以在执行恢复操作时。在需要先在node 49 这台机子上,执行恢复操作命令如下:#ndb_restore -c 172.16.10.117-n 2 -m -b 1 -r /mysql/BACKUP/BACKUP-1/mgmd为管理节点的ipnode_id为数据节点ID,在mgm的客户端通过show查看-m在第一个数据节点上执行,它的作用恢复数据元,数据元的作用:所有数据库表的名称和定义.在其他节点,上就不需要此参数了.backup_id就是备份的次数.也就是你在此startbackup上,提示的那个id4:要想放弃正在处理的备份1)启动管理服务器。2)执行命令ABORT BACKUP backup_id。backup_id是当备份开始时包含在管理服务器应大中的备份ID(在消息“备份backup_id启动”中)3)管理服务器用消息“放弃指示的备份backup_id”确认放弃请求,注意,尚未收到对该请求的实际回应。4)一旦放弃了备份,管理服务器将通报“备份backup_id因XYZ而放弃”。这意味着簇中止了备份,并从簇文件系统中删除了与该备份有关的所有文件。在系统shell中使用下述命令,也能放弃正在执行的备份:shell& ndb_mgm -e "ABORT BACKUP backup_id"注释:执行放弃操作时,如果没有ID为backup_id的备份,管理服务器不会给出任何明确回应。但是,所发出的无效放弃命令将在簇日志中给出5:如何恢复簇备份簇恢复程序是作为单独的命令行实用工具ndb_restore实现的,它将读取由备份(由在管理节点的客户端上执行start backup)创建的文件,并将保存的信息插入数据库。必须为每组备份文件执行恢复程序,也就是说,执行次数与创建备份时运行的数据库节点数相同。(当初创建备份时,有几个数据节点参与,就需要执行这样的命令几次,2个数据节点,就需要执行2次,但第一次与第二次在参数上是不同的,第一次需要参数-m,第二次,不用加此参数,此参数的作用是,创建数据元.)首次执行恢复程序时,还需要恢复元数据。换句话讲,必须重新创建数据库表(注意,开始执行恢复操作时,簇中应有一个空数据库,这里说的创建数据库表,并不是说,让你在sql节点上,在指定的库内,用createtable建个空白,而是说,用ndb_restore命令中的一个参数-m)。恢复程序对于簇来说相当于API,因此,需要一个空闲连接,以便与簇相连。(为此,我们可以在config.ini中添加一个[mysqld],以便于有个空的节点ID,为它提供.)可使用ndb_mgm命令SHOW(在系统shell下使用ndb_mgm-e SHOW即可完成该操作)进行验证,查看,是否有一个空的mysql(api)节点,没有任何连接,并且允许任意主机,连接。可以使用开关“-c connectstring”来确定MGM节点的位置。(关于连接字符串的更多信息,请参见17.4.4.2节,“MySQL簇连接字符串”。备份文件必须位于恢复程序参量给定的目录下。能够使用与创建时所用配置不同的配置,将备份恢复到数据库。例如,对于备份ID为12的备份,该备份是在具有两个数据库节点(节点ID无恶2和3)的簇中创建的,可以将其恢复到具有4个节点的簇中。这样,ndb_restore必须运行两次,为创建备份时的每个数据库节点运行一次。我恢复实例操作流程():(1)首先备份,start backup(记住,backup_id)(2)修改config.ini,再其追加个[API]---增加空的[API]的个数要和现有的API节点数据相同。增加前: [mysqld(API)] &2 node(s)id=50 & @172.16.10.115 &(mysql-5.6.14 ndb-7.3.3)id=51 & @172.16.10.116 &(mysql-5.6.14 ndb-7.3.3)增加后:[mysqld(API)] & 4 node(s)id=50 & @172.16.10.115 &(mysql-5.6.14 ndb-7.3.3)id=51 & @172.16.10.116 &(mysql-5.6.14 ndb-7.3.3)id=52 (not connected,accepting connect from any host)id=53 (not connected,accepting connect from any host)(3)停止mgmd,ndb_mgm -e shutdown(如果是在第一次添加空闲节点后,可以执行该命令结束掉管理节点和其他节点。在以后的恢复操作中,不需要每次都关闭到管理节点)(4)启动mgmd,ndb_mgmd(当然,在config.ini文件目录下执行此命令)(5)启动数据节点:ndbd --initial(有几个节点,执行此命令几次)(6)在数据节点上执行ndb_restore -c mgmd -n node_id -m -bbackup_id -r [backup_path=]/path/to/backup/files我的:ndb_restore -c 172.16.10.117 -n 2 -m -b 1-r /mysql/BACKUP/BACKUP-1/记住,这个"/",很重要.mgmd为管理节点的ipnode_id为数据节点ID,在mgm的客户端通过show查看-m在第一个数据节点上执行,它的作用恢复数据元,数据元的作用:所有数据库表的名称和定义.在其他节点,上就不需要此参数了.backup_id就是备份的次数.也就是你在此startbackup上,提示的那个id,如果不知道,可以到保存此备份的目录下看.执行的结果:(下)[root@xiayali root]#/usr/local/mysql/bin/ndb_restore -c 172.16.10.117 &-n 2 -m -b 1 -r /mysqlback/BACKUP/BACKUP-1/Ndb version in backup files: Version5.0.19Connected to ndb!!Successfully restored table test/def/ctest_____________________________________________________Processing data in table: test/def/ctest(2) fragment 0_____________________________________________________Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 0_____________________________________________________Processing data in table: sys/def/SYSTAB_0(0) fragment 0Restored 0 tuples and 0 log entriesNDBT_ProgramExit: 0 - OK执行过后,在其sql节点上,只能看到表,不能看到数据,哈哈,这就是-m的作用!(7)在其他数据节点上执行ndb_restore -c 192.168.1.112 -n 3 -b 1 -r /mysql/BACKUP/BACKUP-1/执行的结果:(下)[root@xiayali bin]# /usr/local/mysql/bin/ndb_restore -c 192.168.1.112 -n 3 -b 1-r /mysqlback/BACKUP/BACKUP-1/Ndb version in backup files: Version 5.0.19Connected to ndb!!_____________________________________________________Processing data in table: test/def/ctest(2) fragment 1_____________________________________________________Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 1_____________________________________________________Processing data in table: sys/def/SYSTAB_0(0) fragment 1Restored 1 tuples and 0 log entriesNDBT_ProgramExit: 0 - OK执行过后,就能用select看到数据了注释:对于快速恢复,能够以并行方式恢复数据,但必须有足够的可用簇连接。然而,数据文件必须始终前于日志文件。注意:6:注意事项1:如果采用磁盘表方式存储数据时,在恢复的时候需要将mysql 数据库目录中的/var/lib/mysql/ndb_1_fs目录中的数据文件和undofile 文件重新命名或者删除掉。在恢复数据的时候,ndb节点,在需要按以下命令执行#pkill -9 ndbmtd#ndbmtd --initial (进行初始化操作)管理节点如果已经添加有空的[API]或者[MYSQLD]节点。2:在执行 /usr/local/mysql/bin/ndb_restore -c 172.16.10.117 -n 2 -m -b 1 -r /var/lib/mysql/BACKUP/BACKUP-1命令后,如果需要恢复整个数据库,即是整个数据库都被删除(drop database),则在恢复数据后,需要先创建数据库(create database ),然后数据才能出现。4.故障处理4.1. 错误一管理台提示以下错误,无法正常添加节点。- Failed to allocate nodeid, error: 'Error:Could not alloc node id at 172.16.10.117 port 1186: Connection done from wronghost ip 172.16.10.24.该故障说明配置文件中没有172.16.10.24的NDB节点'4.2. 错误二创建表提示Error Code: 1114 - The table 'USER_PROPS' isfull1:修改数据节点Mysql的配置文件#vi /f,在[mysqld]下添加/修改两行:tmp_table_size = 256M max_heap_table_size = 256M2:修改管理节点配置文件增大数据和索引大小#vi /var/lib/mysql-cluster/config.ini增加或修改以下内容:DataMemory=1024MIndexMemory=512MaxNoOfOrderedIndexes=10243:增大表空间容量3.1:查看表空间使用情况Mysql&SELECT TABLESPACE_NAME, FILE_NAME,EXTENT_SIZE*TOTAL_EXTENTS/ AS TOTAL_MB,EXTENT_SIZE*FREE_EXTENTS/ AS FREE_MB, EXTRA FROMinformation_schema.FILES WHERE FILE_TYPE="DATAFILE";3.2:修改表空间,增加新的数据文件Mysql&ALTER TABLESPACE ts_1ADD DATAFILE 'data_4.dat'INITIAL_SIZE 10240MENGINE NDBCLUSTER; 3.3:查看undo日志文件使用量信息Mysql&select * from ndbinfo.logspaces wherelog_type='DD-UNDO';Mysql&SELECT FILE_NAME,LOGFILE_GROUP_NUMBER, EXTRA & & FROMINFORMATION_SCHEMA.FILES &WHERELOGFILE_GROUP_NAME = 'lg_2';3.5:修改日志文件组,增加新的undo file文件Mysql& ALTER LOGFILE GROUP lg_1ADD UNDOFILE 'undo_2.log'INITIAL_SIZE 2048MENGINE NDBCLUSTER;4.3.错误三无法创建日志文件组,并添加undo日志文件(如果创建时按以下语句执行报语法错误提示,可能是编码问题,运行命令setcharacter_set_client=latin1; 原因:Character sets and binary log files. Currently, thendb_apply_status and ndb_binlog_index tables are created using the latin1(ASCII) character set. Because names of binary logs are recorded in this table,binary log files named using non-Latin characters are not referenced correctlyin these tables. This is a known issue, which we are working to fix. (Bug#50226))1:mysql& create logfile group lg_2 add undofile 'undo_2.log'initial_size 1024M undo_buffer_size 128MERROR 1528 (HY000): Failed to create LOGFILE GROUPmysql&+-------+------+---------------------------------------------------+| Level | Code | Message |+-------+------+---------------------------------------------------+| Error | 1296 | Got error 1504 'Out of logbuffer memory' from NDB || Error | 1528 | Failed to create LOGFILE GROUP |+-------+------+---------------------------------------------------+2 rows in set (0.00 sec)2:可以看出是由于超出logbuffermemory 大小原因导致的,是因为SharedGlobalMemory的值比UNDO_BUFFER_SIZE小导致错误。解决办法:把SharedGlobalMemory调大,原来我的UNDO_BUFFER_SIZE为128,但是我的SharedGlobalMemory为80,将SharedGlobalMemory设置成384M解决问题。4.4.错误四导入数据的时候遇到如下报错:ERROR 1005 (HY000) at line 25: Can't createtable 'tuge.pangolin_fnc_accountverification' (errno: 140) Error | 1296 | Goterror 738 'Record too big' from NDB & &分析原因:表但行数据太大解决办法:需要更改表结构,使最大单行数据的大小小于8KB!4.5.错误五导入大量数据的时候遇到如下报错Error 1297: Got temporary error 'REDO' logoverloaded. ERROR : Got temporary error 1204 'Temporary failure,distribution changed' from NDBCLUSTERERROR : Got temporary error 1234 'REDO log filesoverloaded (increase disk hardware)' from NDBCLUSTER分析原因:遇到这个错误,是表示redolog用完了,需要增加解决办法:修改config.ini文件,更改或添加如下参数:FragmentLogFileSize=256MNoOfFragmentLogFiles=16NoOfFragmentLogFiles这个参数可以更改到更大,但是初始化的时候会慢一点4.6.错误六在还原的时候遇到如下报错:Configuration error: Error : Could not allocnode id at 192.168.100.223 port 1186: Id 12 configured as ndbd(NDB), connectattempted as mysqld(API).Unable to connect to management server.分析原因:因为还原的时候会去连接mysqld,而在配置ndb的时候没有添加空的mysqld节点,因此出现这个报错解决办法:在config.ini添加几个空的mysqld节点(空节点数必须和现有节点数一致),语法如下:[API][API]4.7.错误七导入大量数据的时候或者执行大量的insert或者update操作的时候,经常会出现如下报错:ERROR 1297 (HY000) at line 1: Got temporaryerror 1218 'Send Buffers overloaded in NDB kernel' from NDBCLUSTER这个报错的原因有几个,第一、是参数SendBufferMemory设置过小,第二、和mysqld的二进制日志有关系,第三、和网络环境有关系解决办法:查看网络环境是否OK ,是否出现双工模式部队,是否都是千兆网或者百兆网,加大SendBufferMemory的设置,一般2M就够了,设置TotalSendBufferMemory = 256M,最后如果还是出现如此报错,建议关闭mysql的二进制日志,在</f中注释掉相关的参数就可以了,比如:#log-bin=mysql-bin4.8.错误八管理节点错误日志Status: Temporary error, restart nodeMessage: System error, node killed during noderestart by other node (Internal error, programming error or missing errormessage, please report a bug)Error: 2303Error data: Node 12 killed this node because GCPstop was detectedError object: NDBCNTR (Line: 273) 0x分析原因:这个问题是因为undo日志文件空间用完了!解决办法:增加undo日志空间文件,语法如下:ALTER LOGFILE GROUP lg_1ADD UNDOFILE 'undo_2.log'INITIAL_SIZE 2048MENGINE NDBCLUSTER;4.9.错误九还原的时候出现如下报错:Temporary error: 266: Time-out in NDB, probablycaused by deadlock分析原因:出现这个问题是锁定超过1.2s解决办法:在config.ini中加入:TransactionDeadLockDetectionTimeOut=10000 默认是1200
了这篇文章
类别:未分类┆阅读(0)┆评论(0)

我要回帖

更多关于 mysql ndb cluster 的文章

 

随机推荐