如何修改MySQL数据库的密码MySQL综合

2025-01-04

如何修改MySQL数据库的密码MySQL综合(共14篇)

1.如何修改MySQL数据库的密码MySQL综合 篇一

PHP作为一种跨平台的动态网站服务器端脚本语言, 可在Windows9X/NT/2000/Me, Sco Unix, Sun Solaris, Linux等多种平台上运行, 支持M SSQL Server, Oracle, My SQL, DBM等常用数据库。在一个平台上用PHP脚本语言编写的程序, 不用修改就可以在另一个平台上运行。基于一种数据库编写的PHP脚本语言程序, 略作修改就适用于另一种数据库。近几年, PHP因其免费、跨平台、运行于服务器以及可嵌入HTML等优点, 被很多人用来开发基于Web的应用程序或数据库。

1 PHP程序访问Mysql数据库的方法和程序

用PHP程序访问Mysql数据库的方法具体步骤如下:

1.1 mysql_connect ()

语法:int mysql_connect ([string hostname[:port][, string username[, string password]]]) 。

该函数与My SQL数据库服务器建立一个连接, 函数的参数分别是主机名、端口号 (一般用默认号3306) 、用户名和密码。函数执行成功则返回一个integer型的连接描述符, 如果出错返回false。

1.2 mysq_lselect_db ()

语法:int mysql_select_db (string database name[, int link_identifier]) 。

该函数选择一个My SQL数据库, 即建立一个与数据库database name的连接。其后的任何mysql-query () 操作都作用在database n a m e指定的数据库上。执行成功返回T U R E, 失败返回F A L S E。

1.3 mysql_query ()

语法:int mysql_query (string query[, int link_identifier]) 。

该函数向选定的数据库送出一个查询字符串。参数query就是查询字符串, 提供给My SQL数据库进行相关的操作。如果失败, 则返回FALSE, 成功则返回查询结果。

1.4 mysql_fetch_array ()

语法:array mysql_fetch_array (int result, int[resulttype]) ;本函数用来将查询结果result拆到数组变量中。若result没有资料, 则返回false值。

1.5 mysql_num_rows ()

语法:int mysql_num_rows (int result) 。

该函数可以得到返回记录的数目, 比如查询到多少条记录。

下面给出实际应用的简单例子和程序。

设有一张表, 存放在名为server1的Mysql数据库服务器上, 表的结构如下。

现在, 我们用PHP程序查询出所有学生的id号和姓名。程序如下。

2 结语

本文概括介绍了用PHP、CAPI访问Mysql数据库的方法和程序, Mysql应用的广泛性注定需要爱好者们更多的学习和实践。

摘要:Mysql数据库是快速, 功能强大且价格低廉的应用于网络的数据库, 在网络方面表现非常优越。本文介绍了PHP程序访问Mysql数据库的方法和程序。

关键词:Mysql,PHP,数据库

参考文献

[1]王军.Ian Gilfillan《MySQL4从入门到精通》[M].北京:电子工业出版社, 2003.

2.如何修改MySQL数据库的密码MySQL综合 篇二

MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快,因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。

另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。

对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。

2、使用连接(JOIN)来代替子查询(Sub-Queries)

MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:

DELETE FROM customerinfo

WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:

SELECT * FROM customerinfo

WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

如果使用连接(JOIN).. 来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下:

SELECT * FROM customerinfo

LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.

CustomerID

WHERE salesinfo.CustomerID IS NULL

连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。

3、使用联合(UNION)来代替手动创建的临时表

MySQL 从 4.0 的版本开始支持 UNION 查询,它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用 UNION 来创建查询的时候,我们只需要用 UNION作为关键字把多个 SELECT 语句连接起来就可以了,要注意的是所有 SELECT 语句中的字段数目要想同。下面的例子就演示了一个使用 UNION的查询。

SELECT Name, Phone FROM client

UNION

SELECT Name, BirthDate FROM author

UNION

SELECT Name, Supplier FROM product

4、事务

尽管我们可以使用子查询(Sub-Queries)、连接(JOIN)和联合(UNION)来创建各种各样的查询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种工作。但是在这种情况下,当这个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来。设想一

3.如何修改MySQL数据库的密码MySQL综合 篇三

企业最有价值的资产通常是其数据库中的客户或产品信息。因此,在这些企业中,数据库管理的一个重要部分就是保护这些数据免受外部攻击,及修复软/硬件故障。

在大多数情况下,软硬件故障通过数据备份机制来处理。多数数据库都自带有内置的工具自动完成整个过程,所以这方面的工作相对轻松,也不会出错。但麻烦却来自另一面:阻止外来 入侵窃取或破坏数据库中的信息。不幸的是,一般没有自动工具解决这一问题;而且,这需要管理员手工设置障碍来阻止 ,确保公司数据的安全。

不对数据库进行保护的常见原因是由于这一工作“麻烦”而“复杂”。这确实是事实,但如果你应用MySQL,就可以使用一些方便的功能来显著减少面临的风险。下面列出了以下几个功能:

◆删除授权表中的通配符

MySQL访问控制系统通过一系列所谓的授权表运行,从而对数据库、表格或栏目级别的用户访问权利进行定义。但这些表格允许管理员为一名用户设定一揽子许可,或一组应用通配符的表格。这样做会有潜在的危险,因为 可能会利用一个受限的账户来访问系统的其他部分。由于这一原因,在设置用户特权时要谨慎,始终保证用户只能访问他们所需的内容。在给个别用户设定超级特权时要尤其小心,因为这种级别允许普通用户修改服务器的基本配置,并访问整个数据库。

建议:对每个用户账户应用显示特权命令,以审查授权表,了解应用通配符许可是否恰当。

◆要求使用安全密码

用户账号的安全与用来保护它们的密码密切相关。因此,在安装MySQL时第一件事就应该设置MySQL根账号的密码(默认为空)。修复这一漏洞后,接下来就应要求每个用户账号使用一个密码,且不要使用生日、用户名或字典中的单词这些容易识别的启发式密码,

建议:应用MySQL-安全-授权选项避免使用旧的,不大安全的MySQL密码格式。

◆检查配置文件许可

一般来说,要使服务器连接更为快速方便,单个用户和服务器管理员必须把他们的用户账号密码存储在单用户MySQL选项文件中。但是,这种密码是以纯文本形式存储在文件中的,很容易就可以查阅。因此,必须保证这样的单用户配置文件不被系统中的其他用户查阅,且将它存储在非公共的位置。理想情况下,你希望单用户配置文件保存在用户的根目录,许可为0600。

◆加密客户与服务器之间数据传送 :

MySQL(及其它)客户与服务器构架的一个重要问题就是通过网络传送数据时的安全问题。如果客户与服务器间的交互以纯文本形式发生, 就可能“嗅出”被传送的数据包,从而获得机密信息。你可以通过激活MySQL配置中的SSL,或应用一个OpenSSH这样的安全应用来为传送的数据建立一个安全的加密“通道”,以关闭这一漏洞。以这种形式加密客户与服务器连接可使未授权用户极难查阅往来的数据。

◆禁止远程访问

如果用户不需要远程访问服务器,你可以迫使所有MySQL连接通过UNIX插槽文件来完成,从而大大减少网络受攻击的风险。这一过程可通过跳过网络选项启动服务器来完成。这样可以阻止TCP/IP网络连接到MySQL上,保证没有用户可以远程连接系统。

建议:可以在MySQL服务器配置中添加捆绑地址127.0.0.1指令来增强这一功能,迫使MySQL捆绑当地机器的IP地址来保证只有同一系统中的用户可以连接到MySQL。

◆积极监控MySQL访问记录

MySQL中带有很多不同的日志文件,它们记录客户连接,查询和服务器错误。其中,最重要的是一般查询日志,它用时间标签记录每名客户的连接和中断时间,并记录客户执行的每个查询。如果你怀疑发生了不寻常的行为,如网络入侵,那么监控这个日志以了解行为的来源是个好方法。

4.如何修改MySQL数据库的密码MySQL综合 篇四

从sql导出到mysql的方法很多,现介绍一种无需编程,直接利用sql和mysql里的图形界面进行导入导出的简单方法,

前提是已经安装了sqlserver客户端和mysql的图形界面管理工具phpmyadmin。

在控制台根目录下打开sqlserver企业管理器,新建sqlserver组,根据自己的情况进行选择;然后新建sqlserver 注册,进行对sqlserver的连接。准备妥当后,下面就开始了:

首先打开数据转换服务,新建包,打开DTS界面,在连接中选择数据源进行配置。再选择将要转换到的目的文件,这里我选的 Textfile(destination),选择好文件的存放位置之后,我们来新建一个任务,

这里我们只选择转换数据任务,将带有“选择源连接”“选择目的连接”的鼠标分别选中数据源和目的之后,我们对新生成的连接进行定义,在其属性中将源,目的,转换依次定义。

执行任务,提示成功。保存任务。然后在新建的任务上导出数据,有向导提示,其中一项选择“从源数据库复制表和视图”。

这一步已经把数据导出到目的文件中。

下一步在mysql中新建表,与将要导入的结构保持一致时,直接选取“从文本文件中提取数据,插入到数据表:”,将选项添好后,“发送”就可以了,浏览一下,数据已导入了。若要导入的表已经存在,且属性名也不同,这时就先建一个与要导入的数据相同结构的表并导入数据(按刚才的进行就可以了),然后在mysql中导出“数据和结构”,得到sql语句,将其在文本文件中编辑,利用文本编辑器的替换功能,将表名修改,列名加入,最后将其粘贴在要导入表的执行sql语句的地方,执行一下,数据便导入了。

5.如何修改MySQL数据库的密码MySQL综合 篇五

现在,在以学分制为主导的课程教学改革思路的指引下,学生选课成为每一个学期初的重要环节,其要求学生在一定时间内选择该学期要开设的所有选修课。因为选课时间较短,学生在选课时往往无法了解完整的课程体系,有时选课太盲目。学校为提升学生的自主学习和选课能力,在深入调研、广泛探讨的基础上,设计出一套基于My SQL数据库的在线选课系统。

1 在线选课系统需求分析

基于My SQL数据库的在线选课系统开发目的是针对学生自主选择选修课和加强教学组织管理。通常,该系统包括申报选修课、审核选修课、学生在线选课、查询选修结果、学生信息管理、通知通告发布等功能。

基于My SQL数据库的在线选课系统的功能突出表现为管理员、教师、学生和教务管理员的身份上。应用者的需求主要表现为以下几点:

1)提供选修课程信息并审核。

2)管理用户信息。

3)课程的智能化推荐。

管理员具有超级用户的权限,可以对系统进行全方位的管理。教师和学生分别有不同的权限,登录后显示出对应的界面,然后选择必要的操作。教师可以提供该学期要开设的选修课程,维护课程信息,管理学生选修成绩等等。学生可以阅览、查阅选修课数据库,可以自主选课,也可以按照选题智能推荐的课程进行点选。

2 在线选课系统设计思想

为强化学生的自主选课能力,在线选课系统要存储并处理大量的数据。所以,该系统以业内常用的My SQL数据库进行挂接,采用PHP进行程序设计,智能排列管理员设置的课程,按院系和专业构建相应的专业课程表,为学生提供课程介绍展示,以此实现选修课的自主化选择。

3 在线选课系统总体设计

按照以上需求分析和设计思路,系统的主要子系统有:用户登录校验子系统、管理员后台维护子系统、教师管理子系统、学生选课子系统。

学生在系统中注册后,第一次登录要填报课程爱好调查表,提交调查表后,系统会汇总、整理调查表结果。为实现智能推荐课程和提供必要的选课建议,系统经过核对信息、汇总统计等环节后,引导学生指向选课控制台。控制台中可以显示学生信息、调取选修的课程,查看选修课的得分、参考系统对所选修课程的建议等。依照系统的推荐功能,学生可以快速选课,也可以展开选修课列表进行重新选择。每选择一次课程,该课程就会添加到已选课模块。选择完课程,点击选课结束,系统会对选课结果进行分析并给出选课提示。学生可以调整课程顺序或再次点选课程。选课操作完毕后,系统结束后台算法的运行程序。

4 在线选课系统数据库设计原则

系统在开发之处要做好数据库的设计,主要包括数据的内容和数据的组织方式。数据库的设计目标是数据库设计的重要环节。科学合理的数据库,要避免荣誉数据,对某个记录的定位要准确迅速,且维护方便。为了兼顾对数据库记录定位的速度,有要避免冗余数据,对数据库的设计采取了如下措施:

4.1 规范数据库

对数据库的设计,组织数据库尤为重要,主要指在一个活多个表中存储数据并建立关系。为了避免数据的不统一性,从减少冗余数据存储的角度出发,要规范数据库。要规范命名、规范括号以及孤帆注释等。

1)规范化命名。命名要表意,这是程序的构成基本要素之一。如果数据库所有字段能贴近于其功能,可以使代码编写者和系统维护者更便于理解。比如“nianling”、“shezhi”、“banji”等,可以提升系统的维护性,保持程序的健壮性,更为明晰系统之间的关系。否则,如果命名不能表达系统的含义,后期维护系统时就会困难重重。

2)代码的大括号和缩进要规范。在设计中,常用到大括号等字符。大括号与制表符相结合,构成规范的代码缩进式样,会增强代码的层次感和逻辑感,提高程序的可读性和复用性。

3)小括号的规范使用。代码中也常用到小括号,其使用也要保持一致,便于代码的维护。

4)注释的规范。为了增强程序的易维护性和可读性,注释的标注是重要方式。在代码的设计过程中,为便于开发者理清代码逻辑关系,简单且高效的操作就是基于关系模型的结构化查询语言。

4.2 数据库设计的重要考虑因素

数据库的设计还要考虑到下面的因素:

1)与选课过程的流程相匹配。数据库的设计要与教学管理的课程参数相适应,选课中课程所对应的相关数据,以及对这些数据的处理方式。

2)数据库要符合逻辑,层次合理。数据库结构要科学合理,容易理解,便于维护,可以高效率运行。

3)数据库的结构化要合理,数据库的结构要符合行业标准,要与编码的使用相一致。

4)减低冗余。为了提高系统的运行速度,要降低数据库的冗余度,减小开发难度,使数据库易于实现。

5)数据库要保持数据的一致性和准确性。该系统要面对庞大的用户群体,会有多个用户并发访问数据库,在处理数据时,可能会影响数据的一致性。所以必须对有些数据采取锁定的措施来避免数据的不一致性。

6)确保安全机制。数据库的用户信息和课程的设置带有一定的保密性,安全机制要保证。

7)良好的兼容性。为提升系统的可复用性和可移植性,要遵循兼容性原则。

5 数据库中的数据表

在遵循数据库的设计原则的基础上,要考虑数据表的设计,对设计的性质、特性要细致处理。该系统要包括以下数据表:

5.1 学生基本信息数据表

学校的学生管理处有所有学生的信息,其可以作为学生信息数据库的基本表,但要留出预留字段,以备扩充。其字段主要有学生姓名、年龄、所在院系班级、性别、专业、兴趣等。

5.2 选课逻辑规则表

不同的专业包括不同的课程,具有一定的逻辑关系。为了有效、规范使用这些规则,数据表要存储这些规则。比如那些专业的学生对课程有什么特殊要求,那些专业的学生必修课程要注意什么,课程的选择有没有冲突等。数据表中要注意存储规则,以备调用。

5.3 课程信息数据表

课信息数据表要包括教师提交的课程名称、学分值、学时等信息。

5.4 选课数据表

选课的模块与两个数据表相关,学生表和课程表。课程表在数据库中的操作最频繁,操作性能对全系统的性能影响极为关键。选课表的字段有ID号、学生学号、课程编号、选修成绩、课程类别和备注信息。

因系统采用B/S结构设计,所以浏览器即为结果的展示窗口。用户在表单上输入信息,浏览器将其发送给服务器,服务器的运行平台上的程序就把信息输入到数据库,最后将结果返回到浏览器端。

6 选课系统中数据库操作实例

下面以修改选修课的操作来展示对数据库的处理过程。通过表单的值来判断该操作是否是修改,进而调取数据库,进行后续操作。代码如下:

7 结束语

该在线选课系统是采用浏览器/服务器模式开发的基于数据库的选课信息管理系统,其逻辑结构清晰,数据库设计科学合理,功能的开发采用模块化方式,缩短了开发周期,使系统的运行并行化。依据该模式,不同组的编程人员可以分头进行,不至于因为其他开发者所设计的模块没有完成而妨碍自身所开发的模块。这对于加快开发进程、节约开发成本有很大的帮助。系列模块的设计科学合理,界面友好,应用方便,数据库的信息达到了规范化的要求,统计更为快速、直观,满足了学校教务管理的要求,强化了学生自主学习和选课的能力,提升了教学管理的效率,宜进一步推广应用。

摘要:文章探讨了基于MySQL数据库的在线选课系统的设计。通过分析基于MySQL数据库的在线选课系统的实际需求,阐述了系统的设计思想。在探讨选课系统总体设计的基础上,对数据库的设计原则进行了深入分析,指出了规范数据库、规范命名的原则,对数据库设计的重要考虑因素做了概括。对基本的数据表的构成进行了列举。最后,通过实例展示了选课系统中对数据库操作。

6.如何修改MySQL数据库的密码MySQL综合 篇六

第一步,先查看下当前MYSQL的最大连接数

代码如下复制代码[root@localhost ~]# /usr/local/mysql/bin/mysqladmin -uroot -ppassword variables |grep max_connections

(注意,root替换成你的数据库,不过一般默认就是root,password是数据库密码,) 输入以上命令后会显示下面的信息,这个是最大连接数是100

代码如下复制代码| max_connections | 100 //默认是100

第二部,修改最大连接数为200

代码如下复制代码

[root@localhost ~]# nano /etc/my.cnf

输入以上命令后会进入my.cnf文件内容,在其中加入下面这行代码

代码如下复制代码

max_connections=200

使用上下箭头移动光标,输入后按ctrl+o组合键后保存,保存的时候要再按回车键确定的,这个地方也是我开始没注意的地方,确定后按ctrl+x组合键退出回到命令行

最后一步就是重启mysql

代码如下复制代码

[root@localhost ~]# service mysqld restart //重启mysql的命令

下面是我自己的Centos下测试通过

查看当前系统下mysql设置的最大连接数

代码如下复制代码

1 [root@localhost ~]# /usr/bin/mysqladmin -uroot -p variables |grep max_connections

| max_connections | 100 //默认是100

1 [root@localhost ~]# nano /etc/my.cnf

编辑my.cnf在[mysqld]中加入:

1 set-variable=max_connections=1000

1 [root@localhost ~]# service mysqld restart //重启mysql

7.如何修改MySQL数据库的密码MySQL综合 篇七

首先建立数据库即将迁移到的目录

复制代码 代码如下:

mkdir /media/hdb1/db

复制linux下原数据到新目录下

复制代码 代码如下:

cp -dpR /var/lib/mysql/* /media/hdb1/db

给新目录重命属性

复制代码 代码如下:

chown mysql:mysql /media/hdb1/db

修改文件”/etc/apparmor.d/usr.sbin.mysqld“

复制代码 代码如下:

sudo vim /etc/apparmor.d/usr.sbin.mysqld

复制代码 代码如下:

/var/lib/mysql r,

/var/lib/mysql/** rwk,

改成

复制代码 代码如下:

/media/hdb1/db r,

/media/hdb1/db/** rwk,

修改目录

复制代码 代码如下:

sudo vim /etc/mysql/my.cnf

如datadir = /var/mysql换成datadir = /media/hdb1/db

再开服务器

复制代码 代码如下:

sudo /etc/init.d/apparmor restart sudo /etc/init.d/mysql restart

大功告成!!!!

以上所述就是本文的全部内容了,希望大家能够喜欢。

8.如何修改MySQL数据库的密码MySQL综合 篇八

随着计算机技术的发展, 信息系统在中小企业中的应用越来越广泛:从电子商务平台到ERP企业管理, 数据库管理系统都发挥了重要的作用。目前流行的数据库系统包括Oracle, SQLServer, MyS QL等。尤其是My SQL, 由于它是开源的, 而且性能优越, 所以备受中小企业的青睐。2007年My SQL在所有开发者使用的数据库中已获得了25%的市场份额[1]。中小企业虽然知道数据库的重要性, 但在其维护上还有诸多欠缺。很多企业根本没有专门的数据库管理员, 而是用编程人员取而代之。而对于数据库的优化更是一无所知。这种情况在数据库系统建设初期并不会有太明显的问题, 随着信息量的增大, 系统性能开始下降, 严重时甚至影响到相关的应用系统。因此, 数据库性能的优化要从规划时开始, 从硬件配置、参数设置和数据库系统设计三方面入手。

1 硬件优化

硬件优化是数据数据库优化的基础。缺少良好的硬件性能, 后面的数据库优化将是空谈。主要有三块硬件决定数据库的性能, 它们是CPU, 内存, 硬盘。但数据运行一段时间后, 可以根据运行情况来调整硬件。比如CPU占用过高, 那可能CPU是时候要升级了;如果内存耗尽, 以及虚拟内存使用过多, 那说明需要加内存。专门安装一块固态硬盘用于My SQL的数据存储, 可以在很大程度上提高读写速度。由于内存比磁盘要昂贵得多, 所以中小企业需要考虑如何在既定的预算下获得最高的性能, 根据5分钟规则的经验规则, 如果一页在5分钟里使用的次数多与一次, 它就应当存储在内存中。换句话说, 值得买足够的内存存储所有平均5分钟至少访问一次的数据。对于访问不频繁的那些数据, 应买足够的磁盘以支持所需的I/O访问率[2]。

2 My SQL 配置参数优化

在考虑参数配置之前首先要考虑选择哪种存储引擎。默认的My ISAM管理非事务表。它提供高速存储和检索, 以及全文搜索能力, 占用磁盘空间也比Inno DB小得多。研究发现, My ISAM存储数据可节省空间12%, 存储索引可节省95%[3]。如果企业对数据的查询性能要求较高, 而且更多的从存储空间上来考虑, 可以使用这种引擎。而Inno DB虽然查询性能较低, 但是支持提交、回滚和崩溃恢复的事务安全。所以企业如有大量的重要信息, 并且更注重数据安全方面的考虑, 例如企业工资核算系统, 对数据安全性要求较高, 牺牲一些查询性能是值得的。My SQL的配置参数一般位于/etc/my.cnf文件中。这些参数项, 可以全局设置, 也可以动态设置。有两个参数对Inno DB的优化至 关重要 , 它们是innodb_buffer_pool_size和innodb_thread_concurrency。由于Inno DB是使用一个缓冲池来保存索引和表数据, 这个值设置得越大, 需要磁盘I/O越小。默认的值只有8M, 这显然不能满足一般的性能要求。所以在一台专门的数据服务器上, 这个值可以设置成60%-80%的内存大小, 但是如果服务器上还兼任其它服务, 其值就要相应减少。参数innodb_thread_concurrency设置Inno DB核心内允许的线程数量。合理的值一般是CPU数量乘以2。

3 索引

对于一个现有数据库, 如果发现查询性能不理想, 并且随着数据量的增加越来越糟糕, 那么就要检查是否没有建立合适的索引。索引通常加在用于查询条件或表间连接的字段上, 但不是所有这些字段都要加索引。如果这些字段上的记录达到上千条并且还将继续增加, 那这是索引就能发挥效用。本质上讲索引是一种数据结构, 可以让My SQL更高效地获取数据。例如查询语句SELECT * FROM `table_1` WHERE `column_1`=3181611, My SQL为了得到符合条件的数据, 会遍历表中所有的行。这种遍历的查找算法, 在数据量大时, 会占用很多的时间。尽管程序算法中有很多有用的查找算法, 例如二分法查找, 二叉排序树查找, 哈希查找, 但它们都有各自的适用条件。比如二分法, 要求查找序列是有序的;而二叉排序树法只能在树平衡的情况下才能获得良好的性能。为了得到高效的获取数据的性能, 在数据之外, 数据库系统维护着满足特定查找算法的数据结构, 这些数据结构以某种方式指向数据, 这样就可以在这些数据结构上实现高级查找算法。

在My SQL中, 索引位于存储引擎层。不同的存储引擎, 支持的索引略有不同。最常用的索引类型是B-Tree (Inno DB采用其变种B+Tree) 。尽管B-Tree的索引在查找功能上非常高效, 但也有自身的局限和前提, 它只能应用于三种查找方式:

(1) 左前缀查找

例如用如下语句建立的一张表:CREATE TABLE people (name varchar (50) not null, age int not null, key (name, age) ) ;表里定义的索引包含两个字段。在索引结构中, 这个两个字段的数据是按照定义时的字段顺序排列的, 只有根据name字段查找, 才符合B-Tree的数据结构。如果在上面的语句中, 想要先按age字段查找, 那么可以调整一下key的顺序, 变成key (age, name) 。在实际项目中应在数据库设计阶段考察哪个字段使用的查找频率更大来决定它在索引建立时的顺序。如果两个字段的使用频率一样, 也可以同时建立两个索引, 如key (name, age) , key (age, name) 。因此在建立索引时不仅仅要考虑在哪些主键上需要建立索引, 同时索引中字段的顺序排列也是影响搜索性能的因素。

(2) 全值匹配查找

这是指完全根据索引中的字段, 按照完整值来查找。比如在Select * from people where name=“Ann”and age=45中就使用到了全值匹配查找。

(3) 左前缀及范围查找

比如Select * from people where name like“A%”andage>=12 and age<=50语句中查找所有名字以A开头, 年龄在12岁到50岁的人。

在实践中只能根据B-Tree提供的这三种查找方式编写SQL语句。例如Select * from people where name=“%n”语句由于无法满足左前缀查找而使得索引失去效用。

4 查询优化

正如前面所说的, 在面对大数据查询的时候, 查询条件字段上应建立索引。实践证明在一张拥有1 000 000条记录的表里使用索引比不使用索引的查询时间将至少提高7倍。如果是复杂一点的表连接查询, 例如Select coun (t*) from table_1 left jointable_2ontable_1.column_b=table_2.column_2wheretable_1.column_b=823624237, 在有索引的情况下只需要不到1ms的时间, 而没有索引的话需要4多种的时间才能执行完毕。

My SQL内置有查询优化器, 其工作原理非常复杂, 但核心思想是尽量少读取磁盘和使用索引。在一般的程序开发中, 如果在初始设计数据库时, 遗漏了某些索引, 造成了慢查询, 是可以被目前大多的服务器捕捉到的。My SQL提供的“explain”分析工具, 能分析慢查询原因, 找到哪些字段上需要添加索引。

摘要:数据库性能的优化取决于多方面的因素, 越庞大的数据库, 优化方案越复杂。性能优化可以从服务器硬件配置、MySQL服务器的系统参数设置, 以及数据表的设计这三方面来进行。

关键词:MySQL性能优化,数据表优化,InnoDB优化,索引

参考文献

[1]Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, Jeremy, Arjen, High Performance MySQL.

[2]张永霞, 关于数据库的分析与探讨.

[3]萧田国, 关于InnoDB和MyISAM数据存储特性的研究2008-08-22 http://database.ctocio.com.cn/tips/81/8272581.shtml

9.如何修改MySQL数据库的密码MySQL综合 篇九

-03-03jdbc调用mysql存储过程实现代码

-01-01mysql数据库查询优化 mysql效率

2008-08-08超详细mysql left join,right join,inner join用法分析

2013-03-03mysql 超大数据/表管理技巧

2013-06-06解析优化MySQL插入方法的五个妙招

-01-01mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TAB

2011-08-08mysql数据库replace、regexp的用法

2012-07-07MySQL Order By用法分享

10.如何修改MySQL数据库的密码MySQL综合 篇十

在你自己安装了一个新的MySQL服务器后,你需要为MySQL的root用户指定一个目录(缺省无口令),否则如果你忘记这点,你将你的MySQL处于极不安全的状态(至少在一段时间内)。

在Unix(Linux)上,在按照手册的指令安装好MySQL后,你必须运行mysql_install_db脚本建立包含授权表的mysql数据库和初始权限。在Windows上,运行分发中的Setup程序初始化数据目录和mysql数据库。假定服务器也在运行。

当你第一次在机器上安装MySQL时,mysql数据库中的授权表是这样初始化的:

你可以从本地主机(localhost)上以root连接而不指定口令。root用户拥有所有权限(包括管理权限)并可做任何事情。(顺便说明,MySQL超级用户与Unix超级用户有相同的名字,他们彼此毫无关系。)

匿名访问被授予用户可从本地连接名为test和任何名字以test_开始的数据库。匿名用户可对数据库做任何事情,但无管理权限。

从本地主机多服务器的连接是允许的,不管连接的用户使用一个localhost主机名或真实主机名,

如:

% mysql -h localhost test

% mysql -h pit.snake.nettest

你以root连接MySQL甚至不指定口令的事实只是意味着初始安装不安全,所以作为管理员的你首先要做的应该是设置root口令,然后根据你设置口令使用的方法,你也可以告诉服务器重载授权表是它知道这个改变。(在服务器启动时,它重载表到内存中而可能不知道你已经修改了它们。)

对MySQL 3.22和以上版本,你可以用mysqladmin设置口令:

% mysqladmin -u root password yourpassword

对于MySQL的任何版本,你可以用mysql程序并直接修改mysql数据库中的user授权表:

% mysql -u root mysql

mysql>UPDATE user SET password=PASSWORD(“yourpassword”) WHERE User=“root”;

如果你有MySQL的老版本,使用mysql和UPDATE。

在你设置完口令后,通过运行下列命令检查你是否需要告诉服务器重载授权表:

% mysqladmin -u root status

如果服务器仍然让你以root而不指定口令而连接服务器,重载授权表:

% mysqladmin -u root reload

在你设置了root的口令后(并且如果需要重载了授权表),你将需要在任何时候以root连接服务器时指定口令。

11.如何修改MySQL数据库的密码MySQL综合 篇十一

1 My SQL数据库的安全机制

数据库的安全不仅指数据库服务器的安全,也包括保护整个服务器主机的安全[1],防范偷听、重放、修改和拒绝服务等各种类型的可能攻击。这里着重分内部和外部安全性两部分来探讨。

1.1 内部安全性

内部安全性关心的是文件系统级的问题,即防止My SQL数据目录受到在服务器主机有帐号的人(合法或窃取的)的攻击。如果数据目录内容的权限过分授予,使得每个人均能简单地替代对应于那些数据库表的文件,那么确保控制客户通过网络访问的授权表设置正确就毫无意义了。

1.2 外部安全性

外部安全性关心的是从外部通过网络连接服务器的问题,即保护My SQL服务器,免受来自网络对服务器的连接攻击。这必须设置My SQL授权表,使得用户除非提供有效的用户名和口令,否则不允许访问服务器管理的数据库内容。

1.3 访问控制技术

访问控制[2]是用来保证信息系统中数据完整性和保密性的一项重要技术手段和方法。访问控制的实现首先要考虑对合法用户进行验证,然后是对控制策略的选用与管理[3],最后要对没有非法用户或是越权操作进行管理[4]。

在My SQL中,基于连接主机和用户名这两个信息进行身份的认证。而身份的检查使用user表的Host、User和Password三个列执行。只有客户端主机名和用户名与服务器的user表记录的Host和User列实现了匹配,并且提供了正确的密码时才接受连接。

在User列中通配符是非法的,但是可以指定空的值,它匹配任何名字。user表匹配的空用户名被认为是匿名用户。这意味着在连接期间一个空的用户名被用于进一步的访问检查。Password列可以是空的。它不是通配符,也不意味着匹配任何密码,而意味着用户必须不指定一个密码进行连接。user表的Password列除了空值外都代表加密后的密码。My SQL使用加密后的密码存储,而且正在试图连接的用户提供的密码也使用PASSWORD()函数被加密,在连接过程中使用加密的密码检查密码是否正确。从My SQL角度,加密后的密码是实际密码,因此从安全角度考虑,不应让其它人访问它,特别是,绝对不要让非管理用户读My SQL数据库中的表。

如果连接中的客户端名和用户名与user表中的多行匹配,服务器会在启动时读入user表后进行排序,然后当用户试图连接时,以排序的顺序浏览条目,最后服务器使用与客户端和用户名匹配的首行进行匹配。对在该连接上发生的每个请求,服务器都首先检查请求执行什么操作,然后检查是否有足够的权限来执行它。db表和host表授予数据库特定的权限[5]。在服务器启动时,db表和host表被读取并排序,同时读user表。db表在Host、Db和User范围列上排序,并且host表在Host和Db范围列上排序。对于user表,首先根据最具体的值排序,最后根据最不具体的值排序。当服务器寻找匹配条目时,使用它找到的首项进行匹配。

2 漏洞检测技术

2.1 技术介绍

漏洞检测技术[6]是一项重要的安全技术,也称漏洞扫描技术,即对系统进行检查,发现其中可被攻击者利用的安全隐患。该技术可以分为以下四类:

第一,基于网络的漏洞检测技术。它采用的方法是积极的、非破坏性的。这种技术可以发现一系列平台的漏洞,易安装,还针对已知的网络漏洞进行检验。它的缺点是在一定程度上会影响网络的性能。

第二,基于应用的漏洞检测技术。它采用的方法是被动的、非破坏性的,适用于检查应用软件包的设置。

第三,基于主机的漏洞检测技术。它采用方法是被动的、非破坏性的。这种技术可以非常准确地定位系统的问题,发现系统的漏洞,还可以实现口令解密、剔除一些简单的口令。它的缺点是升级复杂,与平台相关。

第四,基于目标的漏洞检测技术。它采用的方法是被动的、非破坏性的。适用于检查系统属性和文件属性,如数据库、注册号等。通过消息文摘算法,对文件的加密数进行检验,一旦发现改变就通知管理员。

2.2 SQL注入漏洞

2.2.1 SQL注入的原理

结构化查询语言(SQL)是一种文本语言,它用来和数据库进行交互。SQL注入的原理[7]就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入查询。

SQL注入攻击的途径是构建“特殊的输入”,它们是SQL语法中的一些组合,将这些输入作为参数传入Web应用程序,然后通过执行SQL语句而执行攻击者想要执行的操作,从而达到攻击的目的。

SQL攻击分成如下六类:没有正确过滤转义字符;类型的不正确处理;数据库服务器中的漏洞;盲目SQL注入式攻击;条件性差错;时间延误。

2.2.2 SQL注入攻击的防范

1)使用参数化的过滤性语句——要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句[8]。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。

2)避免使用解释程序——因为这正是黑客们借以执行非法命令的手段。

3)避免出现一些详细的错误消息——因为黑客们可以利用这些消息。要使用一种标准的输入确认机制[9]来验证所有的输入数据的长度、类型、语句等。可以通过在IIS上设置自定义错误头来避免详细的错误信息。

4)用存储过程来执行所有的查询——SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

5)检查提取数据的查询所返回的记录数量——如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。还可以通过审计查询日志来发现是否存在此类漏洞攻击。

3 实验分析

3.1 实验环境

实验环境的架构如图1所示:

首先,在My SQL中创建数据库office_db,然后再执行create.asp程序,建立数据库表admin和teach以及插入相应的数据。

3.2 实验

利用My SQL作为后台数据库,建立一个信息管理网站。正常登录进入的页面如下:

1)猜解单引号有没有被屏蔽:结果没有被屏蔽

正常的SQL语句为:

select*form admin where admin_name=’123’and admin_password=‘fae’

构造的注入SQL语句为:

(1)select*from admin where admin_name=’123’or 1=1#and admin_password=‘fae’

(2)select*from admin where admin_name=’123’or 1=1/*and admin_password=‘fae*/#’

(3)select*from admin where admin_name=’123’or 1=1/*and admin_password=‘fae*/--kk’(4)select*from admin where admin_name=’123’or 1=1--kk and admin_password=‘fae’

(1)中由于#表注释,所以select语句执行的条件变为“admin_name=’123’or 1=1”,又因为“1=1”恒为真,所以select语句一定会执行,并进入主页admin.asp(见图3),从而实现了注入攻击。其他的注入方式类似。

2)猜解分号有没有被屏蔽:My ODBC限制了分号分隔的多条语句执行

正常的SQL语句为:select*from admin where admin_name=’123’and admin_password=‘fae’

构造的注入语句为:select*from admin where admin_name=’123’or 1=1;

insert into admin values('user123','user123',5,'综合办',0)#and admin_password=‘fae’;

即在用户名字段中输入:123’or 1=1;insert into admin values('user123','user123',5,'综合办',0)#

在SQL Server中,这条两条SQL语句构成的语句可以在远端成功注入,将在表admin中插入一条非法用户记录,这样就可以以此身份登录了。登录的主页见图4。

注意:在欢迎语句中,其提示为欢迎用户:

123’or 1=1;insert into admin values('user123','user123',5,'综合办',0)#

实际的执行过程为:在SQL中分别执行了select*from admin where admin_name=’123’or 1=1和insert into admin values('user123','user123',5,'综合办',0),其他信息被注释掉了。

此时,我们就可以以用户user123来登录了,用户名及密码都输入user123,结果如表5所示:

这样,我们就成为了合法用户,当然这在管理员没有发现之前,能够做这种注入的前提是必须知道用户表和其中的字段名,这就需要不断的试验,用不同的试验语句去探测和对前台登录页面的分析,不断的猜测其字段和用户表,猜测的过程可以如下:

(1)对表名和数据库表字段的猜测,可能的表名:admin,admin_table,user,user_table,据其使用的场合和环境,以及其登录页面的源代码,源代码在客户端能看到的,从中找寻其命名表和表字段的规律以及可能使用的名字,可以看见在源代码中最常使用的是admin,admin_password,admin_name,admin_office,根据这些去猜测。对于程序员来讲,为了方便记忆和管理,一般都要求前后台使用的命名和字段一致,同时跟数据库的命名有一定的关系,这需要一定的经验。相应的字段也是一致的,但是字段不一定能猜全,不一定需要全部的字段,只需要部分关键的字段就可以。

(2)有了一定的猜测以后,不断的变化可能的组合和语句,分析其可能的表构造,来构造相应的注入sql语句,目的要么是取得已经有的用户名和用户密码,要么在相应的表格中建立你需要的用户和密码,这样都能登录,当然取得已经有的用户和密码被管理员发现的可能性比较小隐蔽性较好。

4 总结

通过分析My SQL数据库的安全机制,指出了机制中的不安全因素,同时给出了改进的建议。还总结了My SQL数据库存在的漏洞,基于此数据库进行了SQL注入漏洞的检测开发。分析了这种漏洞产生的危害性,并提出了相应的防范方法以阻止这种漏洞被攻击者所利用。

摘要:针对MySQL开源数据库,具体分析其内部和外部的安全机制;重点分析了如何防止未经授权的文件系统访问和网络访问。通过与其他大型数据库的对比,指出MySQL数据库存在的不安全隐患;总结了各种漏洞的存在对系统构成的风险,并给出相应的防范对策。最后,在以MySQL为后台数据库的网络环境中,进行了针对多种漏洞的攻击实验。

关键词:数据库,安全机制,MySQL,漏洞检测,注入漏洞

参考文献

[1]丁大勇,王琴.SQL Server与数据安全性[J].电脑知识与技术,2007,4(24):184-185.

[2]马新强,王保华,李丹宁,等.LogicSQL数据库的强制存取控制模型研究与实现[J].计算机研究与发展,2006,43(8):162-167.

[3]李斓,冯登国,徐震.多级安全OS与DBMS模型的信息流及其一致性分析[J].计算机学报,2005,28(7):1123-1129.

[4]彭兵,罗薇.基于JavaBean的数据库访问技术[J].电脑知识与技术,2007,3(13):21-22.

[5]袁晓东,冯颖.B1级数据库管理系统强制存取控制模型研究[J].计算机学报,2000,23(10):1096-1101.

[6]孙钢锋,韩权印.网络隐患扫描器的设计与实现[J].计算机工程,2006,32(7):253-255.

[7]刘帅.SQL注入攻击及其方法检测技术研究[J].电脑知识与技术,2009,5(10):7870-7872.

[8]Denning D,Akl S,Heckman M,et al.Views for Multilevel Database Security[C]//IEEE Transactions on Software Engineering,1987,13(2):129-140.

12.如何修改MySQL数据库的密码MySQL综合 篇十二

软件环境是 windows 2003server企业版sp1+Apache HTTP Server 2.0+mysql5+php5+mysql5

我直接是将Discuz!EXP的一个软件包,( 最大程度提高Discuz!EXP的兼容性,计算机中同时也许正在运行其他MySQL,Discuz!EXP中的MySQL使用6033端口启动服务以避免与您计算机中运行的)在Windows下直接可配置出PHP的运行环境.便配置简单了不少.装上后,可直接配置出上面的环境.(注意要停止IIS服务,以免端口相同而引起冲突.)在安装的时,端口号是可以改变的,如果你不用IIS的话,可直接使用80端口,已符合HTTP的默认端口,我直接使用的80端口.里面还有相关的设置数据库名称的设置,按设置一步步完成即可.装完了,在IE中输入localhost检测是否安装成功.

下面在CMD命令下查看Mysql数据库

开始->运行 中输入cmd

在命令行中找到Discuz!EXP安装所在的目录,我是安装在D盘.(应用程序都不装在C盘)

必依次输入以下命令便可以查看Mysql数据库了.

cd ”Discuz!EXP"

cd MySQL5

cd bin

mysql -uroot -p

show database;

use (你的在配置Discuz!EXP时为网站所设置的数据库的名字)

13.如何修改MySQL数据库的密码MySQL综合 篇十三

由MySQL支持的列类型列在下面。下列代码字母用于描述中:

M

指出最大的显示尺寸。最大的合法的显示尺寸是 255 。

D

适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。

方括号(“[”和“]”)指出可选的类型修饰符的部分。

注意,如果你指定一个了为ZEROFILL,MySQL将为该列自动地增加UNSIGNED属性。

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。

INT[(M)] [UNSIGNED] [ZEROFILL]

一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。

INTEGER[(M)] [UNSIGNED] [ZEROFILL]

这是INT的一个同义词。

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到

18446744073709551615。注意,所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!注意,当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是<=24,对一个双精度浮点数,是在25 和53之间,这些类型如FLOAT和DOUBLE类型马上在下面描述。FLOAT(X)有对应的FLOAT和DOUBLE相同的范围,但是显示尺寸和小数位数是未定义的。在MySQL3.23中,这是一个真正的浮点值。在更早的MySQL版本中,FLOAT(precision)总是有2位小数。该句法为了ODBC兼容性而提供。

FLOAT[(M,D)] [ZEROFILL]

一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个参数表示一个单精密浮点数字。

DOUBLE[(M,D)] [ZEROFILL]

一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.225073858507E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小数位数。没有一个参数的DOUBLE或FLOAT(X)(25 < = X < = 53)代表一个双精密浮点数字。

DOUBLE PRECISION[(M,D)] [ZEROFILL]

REAL[(M,D)] [ZEROFILL]

这些是DOUBLE同义词。

DECIMAL[

14.如何修改MySQL数据库的密码MySQL综合 篇十四

随着互联网的高速发展, 人们对计算机网络的依赖性也越来越高, 小到日常生活, 大到企业运营, 计算机网络已经无处不在。与此同时, 数据库技术日趋成熟, 数据库应用已经普遍建立在计算机网络之上。因此, 各种应用的需求对数据库的可用性和分布性提出了更高地要求。传统的集中式数据库因为通信开销大, 单点故障导致可靠性不高, 所以逐渐被地理上分布, 不因单台数据库服务器而全部瘫痪的分布式数据库所代替。而在各类分布式数据库中My SQL由于其低成本及开源等特性被广大网站开发者所热爱。在Tech Target发起的2012年中国数据管理优先度调查中显示, 有45.5%的用户表示愿意迁至My SQL数据库平台。

基于Amoeba中间件的分布式数据库, 集中地响应应用的请求, 并将SQL请求发送到特定的数据库服务器上执行, 从而实现了负载均衡、读写分离等功能。但是它只能实现同网段内的数据库服务器的分布式部署, 无法跨越互联网的不同网段, 并且它在下属数据库节点异常时, 无法自动恢复, 需要人工进行处理。

为了解决上述问题, 本文提出一种基于Replication和LVS的My SQL分布式数据库实现方案。该方案采用Replication技术实现两个跨网段数据库之间的双向数据同步, 通过LVS和heartbeat实现负载均衡和故障切换, 利用数据库合并技术实现故障恢复, 从而构建出一个跨网段、可用性高、可自动恢复常见故障的分布式数据库系统。

Replication技术

My SQL的复制 (Replication) 技术是一种能够让运行在不同计算机上的两个或者更多个My SQL服务器保持同步变化的机制, 目前支持“主-从”复制关系, 只有一台主控系统 (可读/可写) , 所有的数据修改操作都要在这台系统上进行;有一台或多台从属系统 (只读) , 它们有着与主控系统完全一样的数据, 主控系统上的数据变化在经过一个短暂的延时后也将发生在它们身上, 并且不要求主控和从属系统使用同一种操作系统。

Replication是一种异步的复制, 从一个My SQL instace (称之为Master) 复制到另一个My SQL instance (称之Slave) 。实现整个复制操作主要是由三个线程完成的, 其中两个线程在Slave (SQL线程和I/0线程) , 另外一个线程 (I/0线程) 在Master上。

My SQL数据库系统采用异步复制来保持数据的一致性, 其复制过程可简述如下:主服务器 (Master) 数据更新之后, 通知从服务器 (Slave) , 从服务器的I/O进程连接到主服务器 (Master) , 并请求指定日志文件的指定位置 (或者从最开始的日志) 之后的日志内容;主服务器接收到从服务器I/O进程的请求后, 其I/O进程根据请求信息读取指定日志的指定位置之后的日志信息, 并将其返回给从服务器的I/O进程。返回信息中除了日志所包含的信息之外, 还包括Master端的bin-log文件的名称以及binlog的位置;从服务器的I/O进程接收到信息后, 将接收到的日志内容添加到Slave端的relay-log文件的最末端, 并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中;从服务器的sql进程检测到reday-log中新增加了内容后, 会马上解析relay-log的内容并执行, 从而达到服务器之间的数据同步。

LVS

LVS的英文全称是Linux Virtual Server, 即Linux虚拟服务器。它是章文嵩博士主持的一个开源项目。

LVS主要用于多服务器的负载均衡。它可以实现高性能, 高可用的服务器集群技术。它廉价, 可把许多低性能的服务器组合在一起形成一个超级服务器。它易用, 配置非常简单, 且有多种负载均衡的算法。它稳定可靠, 即使在集群的服务器中某台服务器无法正常工作, 也不影响整体效果。另外可扩展性也非常好。

LVS工作在网络层, 相对于其它负载均衡的解决办法, 比如应用层负载的调度等, 它的效率更高。LVS的通过控制IP来实现负载均衡。IPVS是其具体的实现模块。IPVS的主要作用:安装在Director Server上面, 在Director Server虚拟一个对外访问的IP (VIP) 。用户访问VIP, 到达Director Server, Director Server根据一定的规则选择一个Real Server, 处理完成后然后返回给客户端数据。这些步骤产生了一些具体的实现问题, 比如如何选择具体的Real Server, Real Server如何返回给客户端数据等等。IPVS为此有三种机制:VS/NAT (Virtual Server via Network Address Translation) , 即网络地址转换技术实现虚拟服务器;VS/TUN (Virtual Server via IP Tunneling) , 即IP隧道技术实现虚拟服务器;VS/DR (Virtual Server via Direct Routing) , 即用直接路由技术实现虚拟服务器。

基于Replication和LVS的My SQL分布式数据库实现

本文基于上述Replication和LVS技术提出了一种My SQL分布式数据库系统的实现方案, 如图1所示。

数据节点1 (DB1) 和数据节点2 (DB2) 分别部署在两个不同网段, 通过广域网相连。DB1和DB2之间通过Replication技术实现双向复制。虚拟服务器1 (LVS1) 和虚拟服务器2 (LVS2) 同样部署在两个不同网段, 通过广域网相连。每个虚拟服务器通过IP隧道技术与两个数据节点建立虚拟连接, 当一个数据节点故障时, 自动切换到另一个数据节点, 从而提高数据的可用性。用户1 (USER1) 部署在DB1所属网络NETWORK1, 通过LVS1优先访问DB1;用户2 (USER2) 部署在DB2所属网络NETWORK2, 通过LVS2优先访问DB2, 就近使用本地数据节点, 从而提高响应速度。

Replication技术实现

首先配置DB1为Master, DB2为Slave, DB2复制DB1的数据。然后配置DB2为Master, DB1为Slave, DB1复制DB2的数据。DB1配置为只写入奇数行数据, DB2配置为只写入偶数行数据。配置完成后, 无论DB1还是DB2, 任意一侧数据发生变动, 都能通过Replication技术复制到对方, 从而保证数据的一致性, 实现两个跨网段数据库之间的双向数据同步。

LVS技术实现

本方案为达到负载均衡和故障切换的目的, 采用了LVS中的IP隧道技术 (VS/TUN) 方式来实现虚拟服务器。

DB1设置两个IP地址 (DB1IP1/NETWORK1和DB1IP2/NETWORK1) , 创建两个隧道 (TUN1/NETWORK1和TUN2/NETWORK2) 分别为两个虚拟服务器对外隧道IP地址。DB2设置两个IP地址 (DB2IP1/NETWORK2和DB2IP2/NETWORK2) , 创建两个隧道 (TUN1/NETWORK1和TUN2/NETWORK2) 分别为两个虚拟服务器对外隧道IP地址。

LVS1创建一个隧道 (TUN1/NETWORK1) , 通过加权负载均衡算法与DB1IP1和DB2IP1相连, 给予同网段DB1IP1较高的权重值, 保证优先使用同网段的数据库, 提高响应速度。LVS2创建一个隧道 (TUN2/NETWORK2) , 通过加权负载均衡算法与DB1IP1和DB2IP1相连, 给予同网段DB2IP1较高的权重值, 保证优先使用同网段的数据库, 提高响应速度。LVS1和LVS2中都通过heartbeat检测与两个数据库之间的数据访问连接状态, 当一个数据库出现异常时, 就会自动切换到另一个隧道连接的数据库, 从而实现负载均衡和故障切换。

数据库合并技术实现

本方案采用基于SHELL脚本的数据库合并技术实现对两个数据库的监控及故障恢复。脚本处理流程如下:

(1) 启动数据库后台故障检测守护脚本进程;

(2) 设置两个数据库的控制IP地址分别为DB1IP2和DB2IP2, 设置两个数据库的LVS访问IP地址为DB1IP1和DB2IP1;

(3) 根据预先设置的故障检测时间点 (一般设置为用户对数据库访问较少的时间点) , 对两个数据库的连接状态进行检测, 未到检测时间点守护脚本置于休眠状态, 到达检测时间点唤醒;

(4) 检测守护脚本所在网络和两个数据库的可通性, 如果不通, 写日志报警, 守护脚本置于休眠状态, 等待下一个检测时间点唤醒 (这种情况下物理网络不通, 需要人工干预, 保证网络畅通, 否则无法获取数据库状态) ;

(5) 检测守护脚本所在网络和两个数据库的数据库可访问性, 如果不可访问, 写日志报警, 守护脚本置于休眠状态, 等待下一个检测时间点唤醒 (这种情况下数据库不可访问, 需要人工干预, 保证单个节点数据库运行正常, 否则无法获取数据库的同步状态) ;

(6) 检测两个数据库系统之间的同步状态, 如果正常同步, 写入正常同步日志, 守护脚本置于休眠状态, 等待下一个检测时间点唤醒;如果同步故障, 写入同步故障日志并执行后续步骤;

(7) 通过控制IP地址DB1IP2和DB2IP2分别关闭两个数据库对LVS的访问IP地址DB1IP1和DB2IP1, 停止两个数据库之间的同步线程;

(8) 通过控制IP地址DB1IP2和DB2IP2将数据库DB2中的数据合并到数据库DB1中, 然后把数据库DB1中合并后的数据复制到数据库DB2中;

(9) 重新配置数据库DB1和数据库DB2之间的双向同步关系;

(10) 重新设置两个数据库对外访问的IP地址DB1IP1和DB2IP1;

(11) 写入同步成功日志, 守护脚本置于休眠状态, 等待下一个检测时间点唤醒。

结语

上一篇:三年级冀教英语复习课下一篇:数学建模协会成立新闻稿