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集群实现高可用的更多相关文章

  1. MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken

    MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...

  2. 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数

    超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...

  3. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  4. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  5. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  6. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  7. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

  8. Quartz学习笔记:集群部署&高可用

    Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...

  9. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

随机推荐

  1. 创建ListView的基本步骤 分类: H1_ANDROID 2013-10-31 23:25 1276人阅读 评论(0) 收藏

    参考<疯狂android讲义>第2.5节P94 1.创建一个或者多个ListView <LinearLayout xmlns:android="http://schemas ...

  2. OpenCV编译步骤

    作者:朱金灿 来源:http://blog.csdn.net/clever101 1. 从网上下载OpenCV安装包,然后安装. 2. 打开CMake 2.8设置源码路径和生成的VS工程文件路径.(首 ...

  3. jquery file upload示例

    原文链接:http://blog.csdn.net/qq_37936542/article/details/79258158 jquery file upload是一款实用的上传文件插件,项目中刚好用 ...

  4. 【22.17%】【codeforces718B】 Efim and Strange Grade

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(7)结构体

    一.为什么需要结构体? 为了表示一些复杂的事物,而普通类型无法满足实际需求 二.什么叫结构体? 把一些基本类型组合在一起形成的一个新的复合数据类型叫做结构体. 三.如何定义一个结构体? 第一种方式: ...

  6. js匿名自执行函数

    匿名自执行函数:没有方法名的函数闭包:闭包是指有权访问另一个函数作用域变量的函数: 通过一个实例来解释: 从网上找到了一个案例,使用了for循环.匿名自执行函数.setTimeout. 案例1: va ...

  7. 【v2.x OGE-example 第一节】 绘制实体

    前言: OGE即 OGEngine,是由橙子游戏开发的基于Java支持跨平台的开源游戏引,从12年4月项目成立至今已经有2年多的发展历程.在此期间基于OGEngine开发的项目已经有非常多成功投放市场 ...

  8. github视频录制播放相关功能-参考

    lookingstars/JZVideoDemo  视频播放器 Updated on 11 Aug Objective-C 15 10 caoguoqing/VideoEditDemo  iOS vi ...

  9. NSUserDefaults:通常用来保存一些小巧的数据,如用户的用户名密码,或者是用户的使用习惯,如是否自动打开背景音乐等。

    1,NSUserDefaults通常用来保存一些小巧的数据,如用户的用户名密码,或者是用户的使用习惯,如是否自动打开背景音乐等. 2,使用它的原因就是:代码简短,使用方便 3,使用方法如下: -(vo ...

  10. const常量用extern声明定义的问题(extern变量不能在使用类里初始化)

    test.h #ifndef TEST_H_ #define TEST_H //常量声明和定义采取这种方法即可 const int a = 20;  //不报错,因为const变量链接属性默认是内部链 ...