数据库介绍
数据: 描述事物特性的符号;
记录: 事物一系列典型的特征,例如:alex, male, 28, student
表: 文件;
库: 文件夹;
数据库管软件分类:
关系型数据库:有表结构,例如sqlite
,db2
,oracle
,access
,sql server
,MySQL
,其中mysql最常用;
非关系型数据库:没有表结构,以{key:value}
格式存储的,例如:mongodb
,redis
,memcache
.
数据库服务器: 运行数据库管理软件的计算机;
数据库必要性:
数据要想永久保存,都是保存于文件中,但是一个文件仅仅只能存在于某一台机器上, 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,还存在以下三个问题:
- 程序所有的组件就不可能运行在一台机器上,因为这台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的硬件水平,就一台机器的性能垂直进行扩展是有极限的。于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行;
- 数据安全问题,根据1的描述,我们将程序的各个组件分布到各台机器,但需知各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件(用socket实现),即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理;
- 并发,根据2的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能:远程连接(支持并发)>打开文件>读写(加锁)>关闭文件;
我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。
Mysql准备
window系统操作
下载:
版本: MySQL Community Server 5.7.16
下载地址: http://dev.mysql.com/downloads/mysql/
一般可以选择5.6
版本,更稳定!
下载与自己计算机匹配的版本32位或者64位;
解压:
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql-5.7.16-winx64;
, bin
目录下里的msyql.exe
是客户端启动接口, mysqld.exe
是服务端启动接口.
添加环境变量:
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 -->【将MySQL
的bin
目录路径追加到变值值中,用 ;
分割】
初始化:
输入命令:mysqld --initialize-insecure
,会在安装目录下生成data文件夹
,里边都是初始化数据,包括系统自带的数据库和一些用户认证文件以及默认之后生的数据库文件夹和文件都会保存在data文件
夹中.
启动MySQL服务:输入命令:mysqld
, 启动MySQL服务,此时会一直在这里阻塞.
连接MySQL服务: mysql -u root -p
, 此时密码为空.
在命令行中查看msyql的是否启动: tasklist |findstr mysql
, tskill mysqld
或者pid
关闭相应的进程.
Ubuntu环境
安装:
1. sudo apt-get install mysql-server;
2. sudo apt-get install mysql-client;
3. sudo apt-get install libmysqlclient-dev;
# 注意:安装过程中会提示设置密码,注意一定要设置,安装完成之后可以使用如下命令来检查是否安装成功:
4. sudo netstat -tap | grep mysql:
# 通过上述命令检查之后,如果看到有mysql一直处于阻塞状态则表示安装成功。
5. mysql -u root -p ××××
数据库目录:/var/lib/mysql/
配置文件:/usr/share/mysql
(命令及配置文件) ,/etc/mysql
(如:my.cnf)
相关命令:/usr/bin(mysqladmin mysqldump等命令) 和/usr/sbin
启动脚本:/etc/init.d/mysql
(启动脚本文件mysql的目录)
卸载mysql:
1. sudo apt-get remove mysql-server
2. sudo apt-get autoremove mysql-server
3. sudo apt-get remove mysql-common (非常重要)
4. dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
配置系统服务
原始启动方法
命令行启动服务器:msyqld
.
命令行启动客户端: mysql
.
制作系统service,在命令行中配置系统服务,增加mysql快捷启动;
mysqld --install
: 在系统服务中生成相应的服务快捷方式, mysqld --remove是移除此服务
;
可以在 win+r
输入services.msc
, 查看相应的mysql服务,
启动或停止msyql服务端:
命令行启动mysql: net start mysql
;
命令行关闭mysql: net stop mysql
;
登录 & 设置密码
select user;
可以直接查看当前登录的用户信息;
登录: mysql -uroot
,初始状态下,管理员root
密码为空,默认只允许从本机登录localhost
, 注意-p
后面不能加双引号,直接输密码即可.
设置初始密码:mysqladmin -uroot password 123
,由于原密码为空,因此-p
可以不用;
修改密码:mysqladmin -uroot -p123 password 456
, 因为已经有密码了,所以必须输入原密码才能设置新密码;
忘记密码
命令行免密码登录
- 关闭mysql服务器:
net stop msyql
或者进入services.msc
关闭; - 在服务器中设置免密码登录:
mysqld --skip-grant-tables
, 此时,服务端再次阻塞住; - 重新开启命令窗口, 登录msyql;:
mysql
- 客户端cmd设置密码:
update mysql.user set authentication_string=password('') where user = 'root';
,flush privileges
; - 退出客户端:
exit
- 关闭服务端:
tskill mysqld\pid
; - 重新启动服务端:
net start msyql
;
配置启动文件
在msyql主目录下创建my.ini
文件,并在ini文件中指定登录msyql时跳过用户认证功能.
- 关闭mysql服务端,同上;
- 在主目录下,新建mysql配置文件
my.ini
; my.ini
内容:[mysqld] skip-grant-tables
- 启动服务, 方法同上;
- 设置密码, 方法同上;
- 注释
my.ini
中的skip-grant-tables
; 重新启动服务器;
数据库自定义配置
在主目录下新建
my.ini
,内容如下:[mysqld] # 只针对mysqld才读取的配置, 第一次启动时候生效 # skip-grant-tables # 免密码登录 port=3306 character_set_server=utf8 # 统一字符编码为utf-8 default-storage-engine=innodb # 设置默认存储引擎 innodb_file_per_table=1 basedir=E:\mysql-5.7.19-winx64 # 解压的目录 datadir=E:\my_data # 库存储地址, 在指定数据库初始化时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据 [mysql] # 只是对mysql 才读取的配置
执行
mysqld
命令时,下列配置会生效,即mysql服务启动时生效.