Mysql 数据库开发简介与选择

Posted 会飞的鱼-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 数据库开发简介与选择相关的知识,希望对你有一定的参考价值。

文章目录

  • 前言
  • 一、为什么要使用数据库
    • 数据库的概念
    • 为什么要使用数据库
  • 二、程序员为什么要学习数据库
  • 三、数据库的选择
    • 主流数据库简介
    • 使用mysql的优势
    • 版本选择
  • 四、Windows 平台下安装与配置MySQL
    • 启动MySQL 服务
    • 控制台登录MySQL命令
  • 五、Linux 平台下安装与配置MySQL
  • 总结


前言

程序员Jack还是在在校学习期间,就听高年级的大哥忠告,“小伙子,搞编程,想要成为最牛逼的程序员,一定要学好C/C++语言和数据结构及算法”,Jack谨记了这句忠告,因为这位高年级的哥们还没毕业就已经被BAT公司预定,在学校那是风光无限,得到了很多高年级美女学姐的青睐。

经过一段时间的刻苦学习,Jack终于把C++ 和数据结构还有算法学得有点模样了,不自觉就进入初级装逼模式,在同学面前那是指手画脚,趾高气昂。。。。

这种状态一直持续到实习期间,Jack 进入一家小有名气的游戏开发公司实习,被安排到一个棋牌游戏的项目组。项目组的项目经理颇为认同新来的Jack 同学(因为面试时问到的C++和数据结构相关的试题,只有Jack 力压群雄,达到了项目经理的要求,甚至有几年工作经验的程序员都搞不定的A*算法,Jack也是对答如流!),并没有给他安排一些意义不大的杂活给他干,而是编制为开发团队的正式一员,享受正式员工的待遇!此时的Jack 意气风发,代码撸的更加卖力了,因此也很快融入了开发团队中。。。

有一天,项目组的小组长给Jack分配了一个新的任务,让Jack 实现用户登陆模块,具体需求如下:

  1. 游戏玩家访问游戏客户端,通过客户端界面输入用户名和密码
  2. 在游戏玩家点击”确认”后,客户端连接至数据库服务器对用户名和密码进行确认,

         如果验证成功,则 玩家可以进入大厅,如果失败,则不允许进入!

     3. 。。。

啊! 数据库! 什么东东?

因为项目需要,Jack 马上紧张起来,翻阅各种资料,耗费了几个废寝忘食的日日夜夜,才从以下几个方面搞清楚了 why do we need database?


提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么要使用数据库

数据库的概念

数据库概念(Database),就是按照数据结构来组织、存储和管理数据,建立在计算机存储设备上的仓库。我们可以把数据库看成电子化的文件柜,也就是存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。

为什么需要数据库

一般情况下,要保存用户的数据,一个最简单的方法是把用户数据写入文件。例如,要保存用户的密码信息,可以写入下面的文件中txt文件:

id,name,passwd

1,小明,123456

2,小红,654321

3,小军,888888

4,小丽,666666

保存用户购买的道具prop.txt

id,prop,price,num

1,金戒指,12,1

1,银戒指,10,1

2,房卡,10,10

3,鲜花,2,6

1,房卡,10,100

... ...

但是,随着应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了大问题:

  1. 读写文件并解析出数据需要大量重复代码;
  2. 从成千上万的数据中快速查询出指定数据需要复杂的逻辑。
  3. 数据缺乏安全感

如果每个应用程序都各自写自己的读写数据的代码,一方面效率低,容易出错,另一方面,每个应用程序访问数据的接口都不相同,数据难以复用。

所以,数据库作为一种专门管理数据的软件就出现了。应用程序不需要自己管理数据,而是通过数据库软件提供的接口来读写数据。至于数据本身如何存储到文件,那是数据库软件的事情,应用程序自己并不关心:

这样一来,编写应用程序的时候,数据读写的功能就被大大地简化了。

二、程序员为什么要学习数据库

  1. 几乎任何一个企业级应用,都要用到数据库。
  2. 无论开发、测试、运维还是架构师,数据库都是加分神器!
  3. 小的软件企业分工不明确,全能型人才能得到更多的机会(就业和提升)
  4. 外包和自由程序员必备

三、数据库的选择

主流数据库简介

        当今市面上的数据库产品众多,每种数据库都有自己的优势和缺点,或出于数据库的性能和易用性考虑,或出于商用和开源考虑,如何选择自己合适的数据库产品,成为重中之重!

   

主要的数据库产品有如下几种:

        Oracle - 作为一种商业性数据库,在事务处理方面有自己独到的优势,功能比较强大,市场占有率也比较高。oracle数据库是一种大型的关系型数据库,在使用上会收费。在部署上,可以根据自己的环境采用单节点或者集群部署。经常会使用于银行和金融机构,存储大量数据,可以对海量数据进行分析处理,在安全性上使用访问控制和多种数据备份机制,可靠性高。

        Mysql - 作为一种开源的轻量级数据库,在开源数据库中比较流行,由于小巧安装方便快捷,经常会用于互联网公司,维护也比较方便。因为开源,使用上比较灵活,mysql还有许多第三方的存储引擎,可以根据自己的需要进行安装。在功能上mysql可能没有oracle强大,但是对于资源的占用非常少,数据恢复快。在维护上,追求稳定的性能和易用性。

        Redis - 作为一种缓存数据库,对于数据的读写特别快,redis之所以快,是因为它数据放在内存中,但是内存比较贵,另一方面,内存也是有限制的,当内存不够时,就需要使用redis的分布式方案。redis作为一种非关系型数据库,可以适用于高并发场景,配合关系型数据库作为做高速缓存,也可以降低磁盘IO,使用键值对存储,不适用于结构复杂的sql数据

另外MongoDB, SQL Server等数据库也是常用的数据库。

使用MySQL 的优势

        如今很多主流网站都选择MySQL数据库来存储数据,比如阿里巴巴的淘宝。那么,MySQL到底有什么优势,吸引了这么多用户?主要是基于以下几点原因:

开源

        开源软件是互联网行业未来发展的趋势。MySQL是开放源代码的数据库,这就使得任何人都可以获取MySQL的源代码,并修正MySQL的缺陷,并且任何人都能以任何目的来使用该数据库,这是一款自由使用的软件。对于很多互联网公司来说,选择使用MySQL是一个化被动为主动的过程,无须再因为依赖封闭的数据库产品而受牵制。

成本因素

        MySQL社区版是完全免费的,企业版基于服务和支持收费。相比之下,Oracle、DB2和SQL Server价格不菲,再考虑到搭载的服务器和存储设备,那么成本差距是巨大的。

跨平台性

        MySQL不仅提供Windows系列的版本,还提供UNIX、Linux和Mac OS等操作系统对应的版本。因为很多网站都选择UNIX、Linux作为网站的服务器,所以MySQL具有跨平台的优势。

容易使用

        MySQL是一个真正的多用户、多线程SQL数据库服务器,能够快速、高效、安全地处理大量的数据。MySQL和Oracle性能并没有太大的区别,在低硬件环境下,MySQL分布式的方案同样可以解决问题,而且成本比较经济,从产品质量、成熟度、性价比来讲,MySQL都是非常不错的。另外,MySQL的管理和维护非常简单,初学者很容易上手,学习成本较低。

版本选择

        MySQL从5.7版本直接跳跃发布了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,不仅在速度上得到了改善,还提供了一系列巨大的变化,为用户带了更好的性能和更棒的体验。

四、Windows 平台下安装与配置MySQL

免费下载网址:MySQL :: Download MySQL Installer

版本选择 :社区版8.0.12

启动MySQL  服务

  • 图形化界面启动

右击“计算机”,在快捷菜单中选择“管理”命令,如图1-25所示,打开“计算机管理”对话框。也可以执行“开始”|“控制面板”|“管理工具”|“服务”来启动服务。

  • 命令行启动

   查看服务命令:  net start

   关闭服务命令:   net  stop  MySQL80

   启动服务命令:   net start  MySQL80

控制台登陆MySQL命令

mysql -h 127.0.0.1 -uroot -密码

五、Linux 平台下安装与配置MySQL

后面再介绍,持续更新中(个人笔记)


总结

        选择数据库时,既要考虑成本,还有考虑维护的稳定和便利性,结合自己的设备规模。最重要的,需要结合我们的业务,如果高安全性,海量数据,能承担高昂的成本,可以选择oracle;一般应用的快速查询,高并发访问,一般情况下都可以选择mysql,另外特殊情况特殊处理!

Mysql数据库安装与简介

  • MySQL 特点 

下面总结了一下 MySQL 具备的特点

1) 功能强大

MySQL 中提供了多种数据库存储引擎,各引擎各有所长,适用于不同的应用场合,用户可以选择最合适的引擎以得到最高性能,可以处理每天访问量超过数亿的高强度的搜索 Web 站点。MySQL5 支持事务、视图、存储过程、触发器等。

2) 支持跨平台

MySQL 支持至少 20 种以上的开发平台,包括 Linux、Windows、FreeBSD 、IBMAIX、AIX、FreeBSD 等。这使得在任何平台下编写的程序都可以进行移植,而不需要对程序做任何的修改。

3) 运行速度快

高速是 MySQL 的显著特性。在 MySQL 中,使用了极快的 B 树磁盘表(MyISAM)和索引压缩;通过使用优化的单扫描多连接,能够极快地实现连接;SQL 函数使用高度优化的类库实现,运行速度极快。

4) 支持面向对象

PHP 支持混合编程方式。编程方式可分为纯粹面向对象、纯粹面向过程、面句对象与面向过程混合 3 种方式。

5) 安全性高

灵活和安全的权限与密码系统,允许基本主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码的安全。

6) 成本低

MySQL 数据库是一种完全免费的产品,用户可以直接通过网络下载。

7) 支持各种开发语言

MySQL 为各种流行的程序设计语言提供支持,为它们提供了很多的 API 函数,包括 PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++、Perl 语言等。

8) 数据库存储容量大

MySQL 数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由 MySQL 内部限制决定的。InnoDB 存储引擎将 InnoDB 表保存在一个表空间内,该表空间可由数个文件创建,表空间的最大容量为 64TB,可以轻松处理拥有上千万条记录的大型数据库。

9) 支持强大的内置函数

PHP 中提供了大量内置函数,几乎涵盖了 Web 应用开发中的所有功能。它内置了数据库连接、文件上传等功能,MySQL 支持大量的扩展库,如 MySQLi 等,可以为快速开发 Web 应用提供便利。

 

  • 数据库的应用

数据库是计算机应用系统中的一种专门管理数据资源的系统。数据有多种形式,如文字、数码、符号、图形、图像及声音等,数据是所有计算机系统所要处理的对象。我们所熟知的一种处理办法是制作文件,即将处理过程编成程序文件,将所涉及的数据按程序要求组成数据文件,再用程序来调用,数据文件与程序文件保持着一定的关系。

在计算机应用迅速发展的情况下,这种文件式管理方法便显出它的不足。比如,它使得数据通用性差、不便于移植、在不同文件中存储大量重复信息、浪费存储空间、更新不便等。

而数据库系统便能解决上述问题。数据库系统不从具体的应用程序出发,而是立足于数据本身的管理,它将所有数据保存在数据库中,进行科学的组织,并借助于数据库管理系统,以它为中介,与各种应用程序或应用系统接口,使之能方便地使用数据库中的数据。

其实简单地说,数据库就是一组经过计算机整理后的数据,存储在一个或多个文件中,而管理这个数据库的软件就称为数据库管理系统。一般一个数据库系统(Database System)
可以分为数据库(Database)与数据管理系统(Database Management System,DBMS)两个部分。主流的数据库软件有 Oracle、Informix、Sybase、SQL Server、PostgreSQL、MySQL、Access、FoxPro 和 Teradata 等等。

 

tar包 安装Mysql

#安装平台 linux7 (x86,bit-64)

#官网链接下载

https://downloads.mysql.com/archives/community/\'Mysql数据库安装与简介_mysql安装简介\'

#创建目录和用户

[root@localhost /]# mkdir data
[root@localhost /]# groupadd mysql
[root@localhost /]# useradd mysql -g mysql
[root@localhost /]# chown mysql:mysql /data/mysql -R

#初始化密码在下面输入

#注: 记住密码 修改密码会用到

[root@localhost ~]# /data/mysql/bin/mysqld --initialize --basedir=/data/mysql --datadir=/data/mysql/data --user=mysql
2021-09-08T15:42:11.394700Z 0 [Warning] [MY-011070] [Server] \'Disabling symbolic links using --skip-symbolic-links (or equivalent                    ) is the default. Consider not using this option as it\' is deprecated and will be removed in a future release.
2021-09-08T15:42:11.394760Z 0 [System] [MY-013169] [Server] /data/mysql/bin/mysqld (mysqld 8.0.25) initializing of server in prog                    ress as process 2261
2021-09-08T15:42:11.400554Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-09-08T15:42:12.064115Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-09-08T15:42:12.739612Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: *>Vs>wSlu3qB

#创建日志存放文件

[root@localhost /]# mkdir /data/mysql/logs
[root@localhost /]# chown mysql:mysql /data/mysql -R

#创建conf文件

#注:文件路径必须与主机一致 查看log日志修改配置文件

[root@localhost /]# cd /data/mysql/
[root@localhost mysql]# vim conf/my.cnf
[mysqld]
server-id = 1
skip-name-resolve
# basedir=/path 最好不要随便设置,默认扩展plugin存放于/usr/lib64/mysql/以及/usr/share/mysql-8.0中,必要的话可以选择在数据库中更改路径
# basedir=/data/mysql
datadir=/data/mysql/data
max_connections = 20000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_cache_size = 8
#query_cache_size = 16M
#query_cache_limit = 2M
key_buffer_size = 4M
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM
# 二进制日志
log-bin=mysql8_log-bin
#binlog-format=MIXD
# 慢查询日志,on开启,query_time超时时间设置
slow-query-log=on
slow-query-log-file=/data/mysql/logs/mysqld.log
long_query_time=2
# error日志
log-error=/data/mysql/logs/mysqld.log
pid-file=/data/mysql/mysqld.pid

innodb_open_files = 600
innodb_buffer_pool_size = 64M
innodb_write_io_threads = 2
innodb_read_io_threads = 2
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_timeout=1
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size = 16M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
bulk_insert_buffer_size = 16M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
bulk_insert_buffer_size = 16M

[client]
loose-local-infile=1

[mysqldump]
quick

#启动

[root@localhost /]# cd /data/mysql/bin/
[root@localhost bin]# ./mysql -uroot -p --socket=/data/mysql/mysql.sock

#连接

[root@localhost bin]# ./mysql -uroot -p --socket=/data/mysql/mysql.sock

#修改密码

#注:mysql中必须以分号结尾

[root@localhost bin]# ./mysql -uroot -p --socket=/data/mysql/mysql.sock
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 13
Server version: 8.0.25

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.

mysql>
mysql> ALTER USER \'root\'@\'localhost\' IDENTIFIED BY \'MyNewPass4!\';
Query OK, 0 rows affected (0.01 sec)

mysql> use mysql;
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> update user set host=\'%\' where user=\'root\';
mysql> ALTER USER \'root\'@\'%\' IDENTIFIED BY \'123123\';

 

以上是关于Mysql 数据库开发简介与选择的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库基础——MySQL数据库简介

数据库的简介与基本使用

LinuxCentOS MySql 安装与配置

mysql主从复制与主主复制

MYSQL

MySQL---1介绍