2-18-搭建mysql集群实现高可用
1 环境清理以及安装
1.1 mysql旧版本清除
准备5台虚拟机,分配如下
mysql管理结点:xuegod1.cn IP:192.168.10.31 (安装server、client)
mysql数据结点:xuegod2.cn IP:192.168.10.32 (安装server、client)
mysql数据结点:xuegod3.cn IP:192.168.10.33 (安装server、client)
msyqlSQL结点:xuegod4.cn IP:192.168.10.34 (安装server、client)
msyqlSQL结点:xuegod5.cn IP:192.168.10.35 (安装server、client)
首先使用如下命令来清理之前操作系统自带的mysql安装:
[root@xuegod1 ~]# yum remove -y mysql
然后使用如下命令:
[root@xuegod1 ~]# rpm -qa|grep mysql
mysql-libs-5.1.73-7.el6.x86_64
对于找到的2个剩余mysql包,请按照如下的命令格式予以删除:
[root@xuegod1 ~]# rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
最后删掉下列文件:
01. rm -rf /var/lib/mysql/*
02. rm -rf /etc/my.cnf
03. rm -rf /etc/init.d/mysqld
1.2 mysql cluster版本安装及准备工作
1 将MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar放到某个目录下(譬如/package) 下面,并且执行如下命令解压:
tar -xvfMySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar
得到如下文件清单:
MySQL-Cluster-client-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-devel-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-embedded-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-server-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-compat-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-test-gpl-7.3.4-1.el6.x86_64.rpm
也可以在PC端解压,只上传server和client的rpm包
通过scp命令讲server和client rpm包传到每一台服务器
[root@xuegod1 ~]# scp MySQL-Cluster-server-gpl-7.4.11-1.el6.x86_64.rpm MySQL-Cluster-client-gpl-7.4.11-1.el6.x86_64.rpm 192.168.10.32:/root/
2 每一台主机都要安装mysql集群软件包(server\client)批量安装
开启所有服务器会话,在xshell右下角选择全部会话,然后在下面的框里面输入命令回车
tar -xvf MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar
批量安装mysql集群软件包(server\client)
yum -y install MySQL-Cluster-server-gpl-7.4.11-1.el6.x86_64.rpm
rpm -ivh MySQL-Cluster-client-gpl-7.4.11-1.el6.x86_64.rpm
会生成两个主要的命令文件:ndb_mgmd 和ndb_mgm
[root@xuegod63 ~]# whichndb_mgm
/usr/bin/ndb_mgm
[root@xuegod63 ~]# rpm -qf/usr/bin/ndb_mgm
MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64
[root@xuegod63 ~]# whichndb_mgmd
/usr/sbin/ndb_mgmd
[root@xuegod63 ~]# rpm -qf/usr/sbin/ndb_mgmd
MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64
还会生成用户:mysql
[root@xuegod63 ~]# id mysql
uid=495(mysql)gid=489(mysql) groups=489(mysql)
1.3 创建文件夹
分如下三个雷来创建对应的文件夹
管理节点创建:
[root@xuegod1 ~]# mkdir /var/lib/mysql-cluster /var/run/mysqld/
数据节点存放数据:
[root@xuegod2 ~]# mkdir /var/run/mysqld
[root@xuegod3 ~]# mkdir /var/run/mysqld
SQL节点: 可不用文件授权 (进程PID目录)
[root@xuegod4 ~]# mkdir /var/run/mysqld
[root@xuegod5 ~]# mkdir /var/run/mysqld
1.4 授权
管理节点授权:
[root@xuegod1 ~]# chown mysql.mysql -R /var/lib/mysql-cluster/ /var/run/mysqld/
数据节点授权:
[root@xuegod2 ~]# chown mysql.mysql -R /var/lib/mysql/ /var/run/mysqld/
[root@xuegod3 ~]# chown mysql.mysql -R /var/lib/mysql/ /var/run/mysqld/
SQL节点授权:
[root@xuegod4 ~]# chown mysql.mysql -R /var/lib/mysql/ /var/run/mysqld/
[root@xuegod5 ~]# chown mysql.mysql -R /var/lib/mysql/ /var/run/mysqld/
1.5 查看mysql root用户密码
注意:当安装完毕MySQL-Cluster-server-gpl包后,将出现如下
提示信息,提醒我们整个cluster安装后的初次超级账户密码存在/root/.mysql_secret这个文件当中。
[root@xuegod1 ~]# cat /root/.mysql_secret
# The random password set for the root user at Wed May 10 16:57:54 2017 (local time): 4plZLpSfizLjKSBm
2 搭建mysql集群
2.1 配置各主机
2.1.1 xuegod1创建管理节点配置文件
[root@xuegod1 ~]vim /var/lib/mysql-cluster/config.ini #写入以下内容
[ndbddefault]
NoOfReplicas=2 #数据写入数量。2表示两份
DataMemory=200M #配置数据存储可使用的内存
IndexMemory=100M #索引给100M
[ndb_mgmd]
id=1
datadir=/var/lib/mysql-cluster #管理结点的日志
HostName=192.168.10.31 #管理结点的IP地址。本机IP
######data node options: #存储结点
[ndbd]
HostName=192.168.10.32
DataDir=/var/lib/mysql #mysql数据存储路径
id=2
[ndbd]
HostName=192.168.10.33
DataDir=/var/lib/mysql #mysql数据存储路径
id=3
# SQLnode options: #关于SQL结点
[mysqld]
HostName=192.168.10.34
id=4
[mysqld]
HostName=192.168.10.35
id=5
在这个文件里,我们分别给五个节点分配了ID,这有利于更好的管理和区分各个节点。当然,要是不指定,MySQL也会动态分配一个
2.1.2 xuegod2数据节点
[root@xuegod2 /]# vim /etc/my.cnf #xuegod3配置一样
[mysqld]
datadir=/var/lib/mysql #mysql数据存储路径
ndbcluster #启动ndb引擎
ndb-connectstring=192.168.10.31 # 管理节点IP地址
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.10.31 #管理节点IP地址
2.1.3 SQL节点配置
[root@xuegod4 ~]# vim /etc/my.cnf #xuegod5配置一样
[mysqld]
ndbcluster #启动ndb引擎
ndb-connectstring=192.168.10.31 #管理节点IP地址
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.10.31 #管理节点IP都中
说明:数据节点和SQL节点配置文件区别,就多一行,数据节点有: datadir=/var/lib/mysql #mysql数据的存储路径,SQL节点上没有。
2.2 MySQL Cluster启动
初次启动命令以及用户密码更改调整:(严格按照次序启动)
先启动:管理节点服务-->数据节点服务-->SQL节点服务
关闭:关闭管理节点服务,关闭管理节点服务后,nbdb数据节点服务会自动关闭-->手动把sql节点服务管理。
执行初次启动前请先确认 将两台机器的防火墙关闭(service iptables stop 或者 设定 防火墙端口可通,两个端口即通讯端口1186、数据端口3306 )
2.2.1 xuegod1上启动管理节点命令
[root@xuegod1 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini # mysql cluster 后台运行进程
#尽量不要把管理结点、 数据结点、存储结点 配置在同一台机子上,否则一个挂了,就全挂了。
查看端口号:
[root@xuegod1 ~]# netstat -anput|grep 1186
tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 2380/ndb_mgmd
tcp 0 0 127.0.0.1:1186 127.0.0.1:49343 ESTABLISHED 2380/ndb_mgmd
tcp 0 0 192.168.10.31:1186 192.168.10.33:48587 ESTABLISHED 2380/ndb_mgmd
tcp 0 0 192.168.10.31:1186 192.168.10.32:35434 ESTABLISHED 2380/ndb_mgmd
tcp 0 0 192.168.10.31:1186 192.168.10.33:48586 ESTABLISHED 2380/ndb_mgmd
tcp 0 0 192.168.10.31:1186 192.168.10.32:35435 ESTABLISHED 2380/ndb_mgmd
tcp 0 0 127.0.0.1:49343 127.0.0.1:1186 ESTABLISHED 2380/ndb_mgmd
2.2.2 xuegod2和xuegod3启动数据节点服务
[root@xuegod2 ~]# ndbd --initial
2017-05-10 09:34:21 [ndbd] INFO -- Angel connected to '192.168.10.31:1186'
2017-05-10 09:34:21 [ndbd] INFO -- Angel allocated nodeid: 2
[root@xuegod3 ~]# ndbd --initial
2017-05-10 05:54:38 [ndbd] INFO -- Angel connected to '192.168.10.31:1186'
2017-05-10 05:54:38 [ndbd] INFO -- Angel allocated nodeid: 3
2.2.3 xuegod4和xuegod5启动SQL结点服务
[root@xuegod4 ~]# mysqld_safe --defaults-file=/etc/my.cnf &
[root@xuegod5 ~]# mysqld_safe --defaults-file=/etc/my.cnf &
查看mysql集群状态:
[root@xuegod1 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.10.32 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *)
id=3 @192.168.10.33 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.10.31 (mysql-5.6.29 ndb-7.4.11)
[mysqld(API)] 2 node(s)
id=4 @192.168.10.34 (mysql-5.6.29 ndb-7.4.11)
id=5 @192.168.10.35 (mysql-5.6.29 ndb-7.4.11)
2.3 数据同步
因为默认密码比较坑人,我们就需要在此之前改一下两台机器mysql的密码。
2.3.1 xuegod5修改mysql root密码
[root@xuegod5 ~]# cat /root/.mysql_secret
# The random password set for the root user at Wed May 24 02:31:53 2017 (local time): Imzb3KPGbjHYxIAl
[root@xuegod5 ~]# mysql -uroot -pImzb3KPGbjHYxIAl
mysql> show database;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1
mysql> set password=password('123456');
Query OK, 0 rows affected (0.01 sec)
mysql> exit;
Bye
[root@xuegod5 ~]# mysql -uroot -p123456 #测试登录
mysql> grant all privileges on *.* to cluster@"%" identified by "123456"; #授权
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
2.3.2 xuegod4修改mysql root密码
[root@xuegod4 ~]# cat /root/.mysql_secret
# The random password set for the root user at Wed May 24 03:08:52 2017 (local time): 4r4jBIWfcedp753c
[root@xuegod4 ~]# mysql -uroot -p4r4jBIWfcedp753c
mysql> set password=password('123456');
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@xuegod4 ~]# mysql -uroot -p123456
mysql> grant all privileges on *.* to cluster@"%" identified by "123456";
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec
3 测试
模拟外部机器的一个客户端插入数据
[root@xuegod1 ~]# mysql -ucluster -p123456 -h 192.168.10.34
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndbinfo |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database db;
Query OK, 1 row affected (0.12 sec)
mysql> use db;
Database changed
mysql> create table test(id int) engine=ndb;
Query OK, 0 rows affected (0.34 sec)
mysql> insert into test values(1000);
Query OK, 1 row affected (0.02 sec)
mysql> select * from test;
+------+
| id |
+------+
| 1000 |
+------+
1 row in set (0.01 sec)
登录另一台sql节点查看
[root@xuegod1 ~]# mysql -ucluster -p123456 -h 192.168.10.35
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db |
| mysql |
| ndbinfo |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.02 sec)
mysql> use db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from test;
+------+
| id |
+------+
| 1000 |
+------+
1 row in set (0.01 sec)
停掉一个节点测试:
[root@xuegod5 ~]# mysqladmin -uroot -p123456 shutdown
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.10.32 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *)
id=3 @192.168.10.33 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.10.31 (mysql-5.6.29 ndb-7.4.11)
[mysqld(API)] 2 node(s)
id=4 @192.168.10.34 (mysql-5.6.29 ndb-7.4.11)
id=5 (not connected, accepting connect from 192.168.10.35)
再启动节点
[root@xuegod5 ~]# mysqld_safe --defaults-file=/etc/my.cnf &
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.10.32 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *)
id=3 @192.168.10.33 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.10.31 (mysql-5.6.29 ndb-7.4.11)
[mysqld(API)] 2 node(s)
id=4 @192.168.10.34 (mysql-5.6.29 ndb-7.4.11)
id=5 @192.168.10.35 (mysql-5.6.29 ndb-7.4.11)
4 关闭服务
关闭mysql集群顺序: 关闭管理节点服务-》 关闭管理节点时,数据结点服务自动关闭 –》 需要手动关闭SQL结点服务
关闭管理节点:
[root@xuegod1 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> shutdown
Connected to Management Server at: localhost:1186
Node 3: Cluster shutdown initiated
Node 2: Cluster shutdown initiated
Node 3: Node shutdown completed.
Node 2: Node shutdown completed.
3 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
ndb_mgm> exit
[root@xuegod1 ~]# ps -aux|grep ndbd #查看不到,说明数据节点已经被关
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 2476 0.0 0.0 103316 836 pts/1 S+ 22:06 0:00 grep ndbd
手动关闭SQL节点服务
[root@xuegod4 ~]# mysqladmin -uroot -p123456 shutdown
[root@xuegod5 ~]# mysqladmin -uroot -p123456 shutdown
或方法二kill掉
[root@xuegod4 ~]# ps -axu|grep mysql
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 4142 0.0 0.1 106244 1392 pts/0 S 08:22 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf
mysql 4253 2.8 44.6 951048 448728 pts/0 Sl 08:22 0:00 /usr/sbin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid
root 4293 0.0 0.0 103316 836 pts/2 S+ 08:23 0:00 grep mysql
[root@xuegod4 ~]# kill -9 4142
[root@xuegod4 ~]# kill -9 4253
[root@xuegod5 ~]# ps -aux|grep mysql
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 4306 0.0 0.1 106244 1392 pts/2 S 07:46 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf
mysql 4417 0.5 44.8 1279896 450652 pts/2 Sl 07:46 0:00 /usr/sbin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid
root 4446 0.0 0.0 103316 836 pts/1 S+ 07:47 0:00 grep mysql
[root@xuegod5 ~]# kill -9 4306
[root@xuegod5 ~]# kill -9 4417
5 总结
再次启动,mysql集群启动
[root@xuegod1 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
[root@xuegod2 ~]# ndbd
[root@xuegod3 ~]# ndbd
[root@xuegod4 ~]# mysqld_safe --defaults-file=/etc/my.cnf &
[root@xuegod5~]# mysqld_safe --defaults-file=/etc/my.cnf &
查看mysql集群状态:
[root@xuegod1 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.10.32 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *)
id=3 @192.168.10.33 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.10.31 (mysql-5.6.29 ndb-7.4.11)
[mysqld(API)] 2 node(s)
id=4 @192.168.10.34 (mysql-5.6.29 ndb-7.4.11)
id=5 @192.168.10.35 (mysql-5.6.29 ndb-7.4.11)
ndb_mgm>
2-18-搭建mysql集群实现高可用的更多相关文章
- MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken
MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...
- 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数
超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...
- hadoop 集群HA高可用搭建以及问题解决方案
hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)
1.熟悉几个组件 1.1.apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...
- 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...
- Nginx+Zuul集群实现高可用网关
代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...
- Quartz学习笔记:集群部署&高可用
Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...
- Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试
文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...
随机推荐
- RGCDQ(线段树+数论)
题意:求n和m之间的全部数的素因子个数的最大gcd值. 分析:这题好恶心.看着就是一颗线段树.但本题有一定的规律,我也是后来才发现,我还没推出这个规律.就不说了,就用纯线段树解答吧. 由于个点数都小于 ...
- Android JNI编程(八)——体验AS2.2.2编写Jni程序、Java调C、C调Java函数、将C代码中的Log打印至Logcat
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 不得不说在AS2.2以上的版本进行开发就一个字——爽,在2.0上使用jni出 ...
- Android 实现限制EditText输入文字的数量
前段时间比较忙 没来的及时分享出来.需求是这样的要求用户只能输入12个字符或者6位中文的数据:作为一个菜鸟遇到这样的问题第一反应就是 Android:maxLength="12"这 ...
- MVC4中AJAX Html页面打开调用后台方法实现动态载入数据库中的数据
之前一直用window.onload方法来调用js方法来实现,今天纠结能不能换个方法实现. 非常明显是能够的. 在html前台页面引用js代码例如以下 @Scripts.Render("~/ ...
- VO对象通过groovy模板映射XML文件
介绍 之前写过JAVA+XSLT相关的技术博客,近期研究了一个开源工具包org.codehaus.groovy,处理VO对象和XML文件映射很方便. 简言之:将VO对象中的属性(包含Collectio ...
- 转载:APP a打开b软件的附件
Importing & Exporting Documents in iOS Posted by weimenglee - 09 Aug 2011 https://mobiforge.com/ ...
- Oracle12c导入scott测试用户(转)
登入DBA用户 connect sys as sysdba; 创建scott用户 create user c##scott identified by tiger;--用户名前加c##,12c要求 授 ...
- System and method for dynamically adjusting to CPU performance changes
FIELD OF THE INVENTION The present invention is related to computing systems, and more particularly ...
- 【序列操作V】平衡树(无旋treap)
题目描述 维护一个队列,初始为空.依次加入 n(1≤n≤105)个数 ai(-109≤ai≤109),第 i(1≤i≤n)个数加入到当前序列第 bi(0≤bi≤当前序列长度)个数后面.输出最终队列. ...
- Android中自定义View和自定义动画
Android FrameWork 层给我们提供了很多界面组件,但是在实际的商业开发中这些组件往往并不能完全满足我们的需求,这时候我们就需要自定义我们自己的视图和动画. 我们要重写系统的View就必须 ...