MongoDB

NoSQL

NoSQL (NoSQL = not only sql )

关系型数据库遵行的ACID规则

  1. A(Aomicity)原子性
  2. C(Consistency) 一致性
  3. I(Isolation) 独立性
  4. D(Durability) 持久性

分布式系统

分布式系统(distributed system):由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。 因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。

分布式的优缺点

  1. 优点
    • 可靠性
    • 可扩展性
    • 资源共享
    • 灵活性
    • 更快的速度
    • 开放系统
    • 更高的性能
  2. 缺点:
    • 故障排除
    • 软件
    • 网络
    • 安全性

RDBMS vs NoSQL

  1. RDBMS
    • 高度组织化结构化数据
    • 结构化查询语言(SQL) (SQL)
    • 数据和关系都存储在单独的表中。
    • 数据操纵语言,数据定义语言
    • 严格的一致性
    • 基础事务
  2. NoSQL
    • 代表着不仅仅是SQL
    • 没有声明性查询语言
    • 没有预定义的模式
    • 键 – 值对存储,列存储,文档存储,图形数据库
    • 最终一致性,而非ACID属性
    • 非结构化和不可预知的数据
    • CAP定理
    • 高性能,高可用性和可伸缩性

CAP定理(CAP theorem)

在计算机科学中, CAP定理(CAP theorem), 又被称作布鲁尔定理(Brewer’s theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
  • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作) CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
  • CA – 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  • CP – 满足一致性,分区容忍必的系统,通常性能不是特别高。
  • AP – 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

NoSQL的优点/缺点

  1. 优点:
    • 高可扩展性
    • 分布式计算
    • 低成本
    • 架构的灵活性,半结构化数据
    • 没有复杂的关系
  2. 缺点:
    • 没有标准化
    • 有限的查询功能(到目前为止)
    • 最终一致是不直观的程序

BASE

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。 BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:

  1. Basically Availble –基本可用
  2. Soft-state –软状态/柔性事务。 “Soft state” 可以理解为”无连接”的, 而 “Hard state” 是”面向连接”的
  3. Eventual Consistency –最终一致性 最终一致性, 也是是 ACID 的最终目的。

who use

Google/Facebook/Mozilla/Adobe/Foursquare/LinkedIn/Digg/McGraw-Hill Education/Vermont Public Radio

mysql 远程连接问题

以下是本人遇到的问题,解决方案如下,仅当参考,每个人的情况可能不一样;以下错误是建立在本地可以连接本地数据库,

1.远程连接不能连接如果错误是
Can’t connect to MySQL server on ‘192.168.82.85’ (61)
修改配置文件  my.cnf      bind-address = 0.0.0.0
2.mac  如果找不到my.cnf   拷贝其他地方的配置文件,到/etc 目录。在配置其配置项

3.如果远程访问不能访问,报Access denied for user ‘root’@’192.168.82.85’ (using password: YES)
修改mysql  >  user  表,所对应的用火的host字段  %:代表任何ip可以访问, 也可以改成指定ip就可以访问

MySQL字符集和校验规则概念

字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。下面我简单举个例子来说明一下:如在某个字符集“X”的A与a,他们的底层编码分别是A=0,a=100。这里符号“A”“a”和底层编码“0”“100”就是字符集的概念范围。假设我们要比较A与a的大小,我们得到a>A,因为我们是根据其底层编码进行比较的,这就是这个字符集“X”的一种校验规则“Z”(根据底层编码来比较)。假设,现在有另外一种校验规则,是先取其相反数,然后再比较大小,那么就很显然的得到a<A,这就是字符集“X”的另外一种校验规则“Z1”。由此可见,一种字符集可能存在多个与之对应的校验规则(一对多关系)。

    关于字符集与校验规则,mysql支持:
1、使用字符集来存储字符串,支持多种字符集;
2、使用校验规则来比较字符串,同种字符集还能使用多种校验规则来比较;
3、在同一台服务器、同一个数据库或者甚至在同一个表中使用不同字符集或校对规则来混合组合字符串;
4、可以在任何级别(服务器、数据库、表、字段、字符串),定义不同的字符集和校验规则。

    查询你的mysql数据库所支持的字符集种类,可以如下:
mysql> show character set;
+———-+—————————–+———————+——–+
| Charset  | Description                 | Default collation   | Maxlen |
+———-+—————————–+———————+——–+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci         2 |
| dec8     | DEC West European           | dec8_swedish_ci         1 |
| ………| ………………….      | …………….        . |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
+———-+—————————–+———————+——–+
36 rows in set (0.00 sec)
  这里的maxlen表示要用最大多少个字节来存储字符集的单个词,default collation表示该字符集的默认校验规则。
  你也可以利用like来进行筛选,如下:
mysql> show character set like ‘latin%’;
+———+—————————–+——————-+——–+
| Charset | Description                 | Default collation | Maxlen |
+———+—————————–+——————-+——–+
| latin1  | cp1252 West European        | latin1_swedish_ci |      1 |
| latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 |
| latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |
| latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |
+———+—————————–+——————-+——–+
4 rows in set (0.00 sec)
   查询你的mysql数据库所支持字符集的校验规则,可以如下:
mysql> show collation;
+———————-+———-+—–+———+———-+———+
| Collation            | Charset  | Id  | Default | Compiled | Sortlen |
+———————-+———-+—–+———+———-+———+
| big5_chinese_ci      | big5      1 | Yes     | Yes           1 |
| big5_bin             | big5     84 |         | Yes           1 |
| dec8_swedish_ci      | dec8      3 | Yes                  0 |
| ……..             | ….     .. | …     | …           . |
| eucjpms_bin          | eucjpms  98 |         | Yes           1 |
+———————-+———-+—–+———+———-+———+
127 rows in set (0.00 sec)
  这里compiled表示该collation所对应的character set是否被编译到此mysql数据库,通过此点就可以知道该mysql数据库是否支持某个字符集。sortlen表示要在内存中排序时,该字符集的字符要占用多少个字节。
  你也可以利用like来进行筛选,如下:
mysql> show collation like ‘latin1%’;
+——————-+———+—-+———+———-+———+
| Collation         | Charset | Id | Default | Compiled | Sortlen |
+——————-+———+—-+———+———-+———+
| latin1_german1_ci | latin1  5 |         | Yes           1 |
| latin1_swedish_ci | latin1  8 | Yes     | Yes           1 |
| latin1_danish_ci  | latin1  | 15 |         | Yes           1 |
| latin1_german2_ci | latin1  | 31 |         | Yes           2 |
| latin1_bin        | latin1  | 47 |         | Yes           1 |
| latin1_general_ci | latin1  | 48 |         | Yes           1 |
| latin1_general_cs | latin1  | 49 |         | Yes           1 |
| latin1_spanish_ci | latin1  | 94 |         | Yes           1 |
+——————-+———+—-+———+———-+———+
8 rows in set (0.00 sec)

    大家可能已经发现collation的名字似乎有规律可循,其实的确也是这样的,并且它也有些特征,如下:
1、两个不同的字符集不能有相同的校验规则(字符集:校验规则 = 1:n);
2、每个字符集都有一个校验规则,就是对应的DEFAULT=YES的那个collation;
3、collation命名规则:字符集名_对应的语言名_ci/cs/bin,其中ci表示大小写不敏感性,cs表示大小写敏感性,bin表示二进

linux下使用crontab定时备份MYSQL数据库的方

 linux下使用crontab定时备份MYSQL数据库的方法:

只需按照下面3步做,一切都在你的掌控之下:

第一步:在服务器上配置备份目录代码:

——————————————————————————–

mkdir /var/lib/mysqlbackup

cd /var/lib/mysqlbackup

——————————————————————————–

第二步:编写备份脚本代码:

——————————————————————————–

vi dbbackup.sh

——————————————————————————–

粘帖以下代码,务必更改其中的username,password和dbname。

代码:

——————————————————————————–

#!/bin/sh

mysqldump -uuser -ppassword dbname | gzip > /var/lib/mysqlbackup/dbname`date +%Y-%m-%d_%H%M%S`.sql.gz

cd  /var/lib/mysqlbackup

rm -rf `find . -name ‘*.sql.gz’ -mtime 10`  #删除10天前的备份文件

——————————————————————————–

第三步:更改备份脚本权限

代码:

——————————————————————————–

chmod +x dbbackup.sh

——————————————————————————–

第四步:用crontab定时执行备份脚本代码:

——————————————————————————–

crontab -e

——————————————————————————–

若每天晚上21点00备份,添加如下代码,

代码:

——————————————————————————–

00 21 * * * /var/lib/mysqlbackup/dbbackup.sh

注:

1、任务调度设置文件的写法
可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
具体格式如下:
Minute Hour Day Month Dayofweek   command
分钟     小时   天     月       天每星期       命令
每个字段代表的含义如下:
Minute             每个小时的第几分钟执行该任务
Hour               每天的第几个小时执行该任务
Day                 每月的第几天执行该任务
Month             每年的第几个月执行该任务
DayOfWeek     每周的第几天执行该任务
Command       指定要执行的程序
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选

字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。
举例如下:
5       *       *           *     *     ls             指定每小时的第5分钟执行一次ls命令
30     5       *           *     *     ls             指定每天的 5:30 执行ls命令
30     7       8         *     *     ls             指定每月8号的7:30分执行ls命令
30     5       8         6     *     ls             指定每年的6月8日5:30执行ls命令
30     6       *           *     0     ls             指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,

以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]

30     3     10,20     *     *     ls     每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

25     8-11 *           *     *     ls       每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

*/15   *       *           *     *     ls         每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

30   6     */10         *     *     ls       每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

50   7       *             *     *     root     run-parts     /etc/cron.daily   [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

2、新增调度任务可用两种方法:
1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。

原文地址:http://my.oschina.net/u/919074/blog/223920