什么是MySql数据库?
MySQL是开源的,任何人都可以在通用公共许可证的许可下下载,并根据个人需求进行修改。
MySQL因其速度、可靠性和适应性而备受关注。大多数人认为MySQL是管理内容的最佳选择,不需要事务处理。
数据库介绍:MySQL是一个开源的关系数据库管理系统(RDBMS)。MySQL数据库系统使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。
因为MySQL是开源的,任何人都可以在通用公共许可证的许可下下载,并根据个人需求进行修改。MySQL因其速度、可靠性和适应性而备受关注。大多数人认为MySQL是管理内容的最佳选择,不需要事务处理。
MySQL这个名字,由来不是很清楚。一个有影响的说法是,10多年来,基础指南和大量的库和工具都以“我的”为前缀,而且无论如何,MySQL AB的创始人之一Monty Widenius的女儿也取名为我的..这两者谁给了MySQL这个名字,至今仍是个谜,包括开发者。
MySQL的海豚logo的名字叫“sakila”,是MySQL AB的创始人在“海豚命名”比赛中从用户推荐的大量名字中挑选出来的。获奖名称由Ambrose Twebaze提供,他是一名来自非洲斯威士兰的开源软件开发人员。据安布罗斯介绍,Sakila来自一种叫做SiSwati的斯威士兰方言,这也是坦桑尼亚阿鲁沙的一个小镇的名字,靠近安布罗斯的家乡乌干达。
MySQL,虽然它的功能可能不是很强大,但是因为它的开源和传播广,很多人都知道这个数据库。它的历史也是传奇的。
MySQL数据库历史:MySQL的历史最早可以追溯到1979。当时的甲骨文还只是小打小闹,没有微软的SQL Server的痕迹。有一个人叫Monty Widenius,在一个叫TcX的小公司工作,用BASIC设计了一个报表工具,可以在一台主频4M,内存16KB的电脑上运行。不久之后,这个工具用C语言重写,移植到Unix平台上。当时,它只是一个非常低级的面向报表的存储引擎。这个工具叫做Unireg。
但是,这个小公司资源有限,蒙蒂极有才华。面对资源有限的不利条件,他更能发挥自己的潜力,总是努力写出最高效的代码。并因此养成了习惯。蒙蒂还有其他一些同事。很少有人能坚持写那些代码20年,但蒙蒂做到了。
在1990中,TcX一些客户开始要求对其API提供SQL支持。当时有人想到直接用商业数据库,但是Monty觉得商业数据库的速度不尽如人意。于是,在mSQL代码的帮助下,他将其集成到了自己的存储引擎中。但遗憾的是,效果不是很好。因此,Monty雄心勃勃,决心自己重写一个SQL支持。
1996,MySQL 1.0发布,只针对一小部分人,相当于内部发布。1996年6月,MySQL 3.11.1发布,呵呵,没有2.x版本。起初只提供了Solaris下的二进制版本。一个月后,Linux版本出现了。
在接下来的两年时间里,MySQL被依次移植到各个平台。发布的时候,采用的授权策略有些不同:允许免费商业使用,但是MySQL不能和自己的产品一起发布。如果要一起发布,必须使用专门的许可,也就是花钱。当然,业务支持也要花钱。其他的可供用户使用。这种特殊的许可给MySQL带来了一定的收入,从而为其可持续发展奠定了良好的基础。仔细想想,PostgreSQL这几年一直处于低谷期,可能与其完全免费、不受限制有关。
MySQL3.22应该是标志性版本,提供基本的SQL支持。
MySQL关系数据库第一版发布于1998+10月。它利用系统内核提供的多线程机制,提供完整的多线程操作模式,为C、C++、Eiffel、Java、Perl、PHP、Python、Tcl等编程语言提供编程接口(API),支持各种字段类型,提供完整的运算符支持查询中的SELECT和WHERE操作。
MySQL是开源的,任何人都可以在通用公共许可证的许可下下载,并根据个人需求进行修改。MySQL因其速度、可靠性和适应性而备受关注。
1999-2000,瑞典成立了一家公司,叫MySQL AB (AB在瑞典语中是“股份公司”的意思)。雇佣了几个人与Sleepycat合作开发伯克利DB引擎。因为BDB支持事务处理,所以MySQL开始支持事务处理。
2000年4月,MySQL将旧的存储引擎整理出来,命名为MyISAM。同时,在2001中,Heikiki Tuuri向MySQL提出了一个建议,希望集成他们的存储引擎InnoDB,该引擎也支持事务处理和行级锁。
不幸的是,如今BDB和InnoDB似乎都被甲骨文收购了。为了消灭竞争对手,哪怕是开源,也是不择手段。
MySQL和InnoDB的官方组合版本是4.0。
到了MySQL5.0,从5438年6月到2003年2月,视图、存储过程之类的东西开始出现。当然,这期间也有很多bug。
MySQL于2008年6月65438+10月被Sun公司收购。
最近,MySQL的创始人Monty Widenius向Sun提交了辞呈。头要走了。
据说孙收购的公司不吉利。不知道MySQL的未来。希望一路走好。我相信MySQL的生命力还很长。
今天,mysql和php的结合绝对是完美的。很多大型网站也使用mysql数据库。mysql的发展前景非常光明!
MySQL常用命令:1:使用SHOW语句找出服务器上当前存在什么数据库:
mysql & gt显示数据库;
2.2、创建数据库MYSQLDATA
mysql & gt创建数据库MYSQLDATA
3.选择您创建的数据库。
mysql & gt使用MYSQLDATA(按回车键,会出现数据库已更改,表示操作成功!)
4.检查当前数据库中存在哪些表。
mysql & gt显示表格;
5:创建数据库表
mysql & gt创建表MYTABLE (name VARCHAR(20),sex CHAR(1));
6.显示表格的结构:
mysql & gt描述我的表;
7:向表中添加记录
mysql & gt插入到MYTABLE值(" hyq "," M ");
8.通过文本将数据加载到数据库表中(例如,D:/mysql.txt)。
mysql & gt将数据本地文件“D:/mysql.txt”加载到表MYTABLE中;
9:进口。sql文件命令(例如,D:/mysql.sql)
mysql & gt使用数据库;
mysql & gt来源d:/MySQL . SQL;
10:删除表格
mysql & gt删除表MYTABLE
11:清理桌子
mysql & gt从我的表中删除;
12:更新表中的数据
mysql & gt更新MYTABLE set sex="f "其中name = ' hyq
全局管理权限的解释:
文件:在MySQL服务器上读写文件。
进程:显示或终止属于其他用户的服务线程。
重新加载:重新加载访问控制列表,刷新日志等。
关机:关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER:修改现有的数据表(比如添加/删除列)和索引。
创建:创建新的数据库或数据表。
删除:删除表格的记录。
删除:删除数据表或数据库。
索引:创建或删除索引。
插入:添加表的记录。
选择:显示/搜索表格的记录。
更新:修改表中的现有记录。
特殊权限:
ALL:允许你做任何事情(就像root一样)。
用法:只允许登录-不允许其他任何操作。
MySQL数据库导入方法:导入MySQL数据库有两种方法:
1)先导出数据库SQL脚本,再导入;
2)直接复制数据库目录和文件。
在不同的操作系统或MySQL版本中,直接复制文件的方法可能会不兼容。
所以一般建议以SQL脚本的形式导入。下面分别介绍两种方法。
2.方法1 SQL脚本表单
操作步骤如下:
2.1.导出SQL脚本
在原始数据库服务器上,可以使用phpMyAdmin工具或mysqldump命令行导出SQL脚本。
2.1.1,使用phpMyAdmin工具
在导出选项中,选择导出结构和数据,不要添加DROP DATABASE和DROP TABLE选项。
选择另存为文件选项,如果有大量数据,则选择gzipped选项。
保存导出的SQL文件。
2.1.2使用mysqldump命令行
命令格式
Mysqldump -u用户名-p数据库名>;数据库名称。结构化查询语言
示例:
mysqldump-u root-p ABC & gt;abc.sql
(将数据库abc导出到abc.sql文件)
当提示输入密码时,输入数据库用户名的密码。
2.2.创建一个空数据库
通过主控制界面/控制面板创建数据库。假设数据库的名称是abc,数据库的完全用户是ABC _ F。
2.3.导入并执行SQL脚本。
还有两种方法,一种是使用phpMyAdmin(mysql数据库管理)工具,或者mysql命令行。
2.3.1使用phpMyAdmin工具
在控制面板中,选择创建的空数据库,点击“管理”进入管理工具页面。
在“SQL”菜单中,浏览选择刚刚导出的SQL文件,点击“执行”上传并执行。
注意:phpMyAdmin对上传的文件大小有限制,php本身对上传的文件大小也有限制。如果原始sql文件
比较大,可以先用gzip压缩。对于sql文件等文本文件,可以获得1:5或更高的压缩率。
如何使用gzip:
# gzip xxxxx.sql
得到
Xxxxx.sql.gz文件。
当提示输入密码时,输入数据库用户名的密码。
3直接复制
如果数据库比较大,可以考虑使用直接复制的方法,但是不同的版本和操作系统可能会不兼容,一定要小心。
3.1准备原始文件
用tar把它打包成一个文件
3.2创建一个空数据库
3.3减压
解压缩到一个临时目录中,例如:
cd /tmp
塔尔zxf mydb.tar.gz
3.4副本
将解压缩的数据库文件复制到相关目录。
cd mydb/
cp * /var/lib/mysql/mydb/
对于FreeBSD:
cp * /var/db/mysql/mydb/
3.5权限设置
将复制文件的所有者改为mysql:mysql,权限改为660。
chown MySQL:MySQL/var/lib/MySQL/mydb/*
chmod 660 /var/lib/mysql/mydb/*
Mssql转换成mysql的方法:1。派生表结构
用MySQL生成create脚本的方法。找到要生成导出的脚本,根据MySQL语法修改MySQL数据库中表格的列结构。
2.派生表数据
使用bcp在MSSQL端导出文本文件;
bcp " Select * FROM dbname . dbo . tablename;"query out tablename . txt-c-Slocalhost \ db 2005-美国
其中" "是要导出的sql语句,-c指定\t表示字段分隔,\n表示记录分隔,-S表示数据库服务器和实例,-U表示用户名,-P表示密码。
在MySQL端使用mysqlimport将一个文本文件导入到对应的表中。
MySQL import-u root-p databasename/home/test/tablename . txt
其中-u指定用户名,-p指定密码,databasename指定数据库名,表名与文件名相同。
MySQL备份和恢复:MySQL备份和恢复数据的一般步骤
备份数据库的示例:
1.备份前读取锁所涉及的表
mysql & gt锁表tbl1读取,tbl1读取,…
如果使用mysqldump实用程序中的- lock-tables选项,就不必使用上面的SQL语句。
2.导出数据库中表格的结构和数据。
shell & gtmysqldump-opt db _ name & gt;数据库名称. sql
3.启用新的更新日志
shell & gtmysqladmin刷新日志
这样,您可以在备份后记录数据更改,并为恢复数据做准备。
4.解锁表格。
mysql & gt解锁表格;
要加速上述过程,您可以这样做:
shell & gtmysqldump-lock-tables-opt db _ name & gt;db _ name.sqlmysqladmin刷新日志
但是可能会有一点小问题。该命令在启用新的更新日志之前恢复表的读锁。
在更新繁忙的站点中,备份后可能会有更新的数据没有记录在新日志中。
现在恢复上面备份的数据库。
1.对相关的表使用写锁。
mysql & gt锁表tbl1写,tbl1写,…
2.还原备份的数据
shell & gtmysql数据库名称& lt数据库名称. sql
3.恢复更新日志的内容。
shell & gtMySQL-one-database db _ name & lt;主机名. nnn
假设要使用的日志名称是hostname.nnn
4.启用新的更新日志
shell & gtmysqladmin刷新日志
5.解锁表格。
mysql & gt解锁表格;
希望上面的例子能对你有所启发,因为备份数据的方式有很多种,你用的可能和上面的有很大不同,但是对于备份和恢复来说,锁表和启用新的更新日志的时机应该是差不多的,所以要慎重考虑这个问题。
MySQL数据库优化:选择InnoDB作为存储引擎
大型产品的数据库要求高可靠性和高并发性。InnoDB作为默认的MySQL存储引擎,是比MyISAM更好的选择。
优化数据库结构
组织好数据库的模式、表和字段,以减少I/O的开销,相关项一起保存,提前规划,这样随着数据量的增长,性能也能保持较高的水平。
设计数据表应尽量减少其占用的空间,并且表的主键应尽可能短。对于InnoDB表,主键所在的列可以在每个辅助索引条目中复制,所以如果辅助索引很多,短主键可以节省很多空间。
仅创建提高查询性能所需的索引。索引有助于检索,但会增加插入和更新操作的执行时间。
改变InnoDB的缓冲特性
InnoDB提供了changebuffering的配置,可以减少维护二级索引所需的磁盘I/O。大型数据库可能会遇到大量的表操作和大量的I/O,以保证辅助索引保持最新。当相关页面不在缓冲池中时,InnoDB的changebuffer会将缓存改为辅助索引条目,从而避免了无法立即从磁盘读取页面而导致的耗时I/O操作。当页面被加载到缓冲池中时,缓冲的更改将被合并,更新的页面稍后将被刷新到磁盘。这样做可以提高性能,适用于MySQL5.5及更高版本。
InnoDB页面压缩
InnoDB支持表的页面级压缩。在写数据页的时候,会有特定的压缩算法对其进行压缩。压缩后的数据将被写入磁盘,其打孔机制将释放页末的空块。如果压缩失败,数据将按原样写入。表和索引都将被压缩,因为索引通常占数据库总大小的很大一部分。压缩可以显著节省内存、I/O或处理时间,从而达到提高性能和可扩展性的目的。它还可以减少内存和磁盘之间传输的数据量。MySQL5.1及更高版本支持该功能。
请注意,页面压缩不支持共享表空间中的表。共享表空间包括系统表空间、临时表空间和常规表空间。
使用批量数据导入
在主键上使用排序的数据源来导入批量数据可以加快数据插入的过程。否则,您可能需要在其他行之间插入行来维持排序,这将导致高磁盘I/O,从而影响性能并增加页面拆分。关闭自动提交模式也是有益的,因为它会在每次插入时对磁盘执行日志刷新。在大容量插入期间临时转移唯一键和外键检查也可以显著减少磁盘I/O。对于新创建的表,最佳做法是在大容量导入后创建外键/唯一键约束。
一旦您的数据达到稳定的大小,或者不断增长的表增加了几十或几百兆字节,您应该考虑使用OPTIMIZETABLE语句来重组表并压缩浪费的空间。扫描重组后的表将花费更少的I/O。
优化InnoDB磁盘I/O
增加InnoDB缓冲池大小允许从缓冲池而不是通过磁盘I/O访问查询。通过调整系统变量innodb_flush_method,可以调整清除缓冲区的索引以达到最佳水平。
MySQL的内存分配
在为MySQL分配足够的内存之前,请考虑MySQL在不同领域的内存需求。要考虑的关键领域是:并发连接——排序和临时表需要大量内存来容纳大量并发连接。在撰写本文时,16GB到32GB的RAM对于拥有3000多个并发连接的数据库来说已经足够了。
内存碎片会消耗大约10%或更多的内存。innodb_buffer_pool_size、key_buffer_size和query_cache_size等缓存和缓冲区会消耗大约80%的已分配内存。
日常保养
定期检查慢速查询日志并优化查询机制,以有效地使用缓存来减少磁盘I/O。优化它们以扫描最小数量的行,而不是扫描整个表。
其他可以帮助DBA检查和分析性能的日志还有:错误日志、通用查询日志、二进制日志、DDL日志(元数据日志)。
定期刷新缓存和缓冲区以减少碎片。使用OPTIMIZETABLE语句重新组织表并压缩任何可能浪费的空间。?