数据库的版本

1.社区版

2.企业版

3.集群版

数据库的安装

1.     专用软件包管理器(二进制)

deb 、rpm等

mysql                 MySQL客户端程序和共享库

mysql-server            MySQL服务器需要的相关程序

2.     源代码软件包(编译安装)

configure、cmake

数据库常用的配置选项

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql    ----指定残可安装路径(默认的就是/usr/local/mysql)

-DMYSQL_DATADIR=/data/mysql                  ----mysql的数据文件路径

-DSYSCONFDIR=/etc                                 ----配置文件路径

-DWITH_INNOBASE_STORAGE_ENGINE=1        ----使用INNOBASE存储引擎

-DWITH_ARCHIVE_STORAGE_ENGINE=1         ----常应用于日志记录和聚合分析,不支持索引

-DWITH_BLACKHOLE_STORAGE_ENGINE=1      ----黑洞存储引擎

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1  编译过程中取消一些存储引擎指令介绍

-DWITHOUT_FEDERATED_STORAGE_ENGINE=1

-DWITHOUT_PARTITION_STORAGE_ENGINE=1

-DWITH_READLINE=1      ----支持批量导入mysql数据

-DWITH_SSL=system      ----mysql支持ssl会话,实现基于ssl的数据复

-DWITH_ZLIB=system      ----压缩库

-DWITH_LIBWRAP=0        ----是否可以基于WRAP实现访问控制

-DMYSQL_TCP_PORT=3306                  ----默认端口

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock      ----默认套接字文件路径

-DENABLED_LOCAL_INFILE=1                ----是否启用LOCAL_INFILE功能

-DEXTRA_CHARSETS=all                            ----是否支持额外的字符集

-DDEFAULT_CHARSET=utf8                  ----默认编码机制

-DDEFAULT_COLLATION=utf8_general_ci    ----设定默认语言的排序规则

-DWITH_DEBUG=0                          ----DEBUG功能设置

 -DENABLE_PROFILING=1                    ----性能分析功能是否启用

3.     服务:mysqld

4.     端口:3306

5.     主配置文件:/etc/my.cnf

6.     脚本:mysql_install_db

7.     mysqld_safe

8.     数据目录:/var/lib/mysql

9.     套接字文件:/var/lib/mysql/mysql.sock

10.  当意外关闭数据库时,再开启时假如开启不了,找到这个,删除再启动

11.  进程文件:/var/run/mysqld/mysqld.pid

登录及退出mysql环境

a)    设置密码 mysqladmin      -uroot          password ‘123’

b)    登录              mysql  -u 用户名 -p

-p 用户密码 

-h 登陆位置(主机名或ip地址)

-P 端口号(3306改了就不是了)

-S 套接字文件(/var/lib/mysql/mysql.sock)

       c)    退出              exit

       d)    创建登录用户       create user 用户名@’%’ identified by ‘密码’

       e)    修改密码       set password=password(‘新密码’)

setpassword for 用户@登录位置=password(‘新密码’)      — — — root用户为其他用户找回密码

当管理员把自己密码忘记了,怎么找回???

1)关闭数据库

2)修改主配置文件(/etc/my.cnf)<------ skip-grant-tables

3)启动数据库

4)空密码登录并修改密码

update   mysql.user setpassword=password(‘新密码’) where user=’root’;

5)删除skip-grant-tables,重启数据库验证新密码

SQL语句

关于库的操作:

Mysql命令

功能

show  databases;

查看服务器中当前有哪些数据库

use  数据库名;

选择所使用的数据库

create database 数据库名;

创建数据库

drop database 数据库名;

删除指定的数据库

 关于表的操作

MySQL命令

功能

create table 表名 (字段1 类型1,...);

在当前数据库中创建数据表

show  tables;

显示当前数据库中有哪些数据表

describe   表名;

显示当前或指定数据库中指定数据表的结构(字段)信息

drop table  表名;

删除当前或指定数据库中指定的数据表

alter  table 旧表名 rename 新表名;

修改数据表的名称

alter  table 表名 modify 字段 类型;

修改字段的类型

alter  table 表名 change 旧字段名 新字段名 类型;

修改字段

alter  table 表名 add 字段 类型(first/after)

增加字段

alter  table 表名 drop 字段

删除字段

MySQL命令

功能

insert into 表名(字段1,字段2,……) values(字段1的值, 字段2的值,……);

向数据表中插入新的记录

update 表名 set 字段名 =新数据  where 条件表达式;

修改、更新数据表中的记录

select 字段名1,字段名2……from 表名 where 条件表达式;

从数据表中查找符合条件的记录

select * from 表名;

显示当前数据库的表中的记录

delete from 表名 where 条件表达式;

                     between...and...

在数据表中删除指定的记录

指定范围

delete from 表名;

将当前数据库表中记录清空

 注:库和表的删除用drop,记录删除用delete

 

权限

grant权限1,权限2,...... on 数据库.数据表 to 用户@登录位置 (identified by ‘密码’);

revoke取消的权限1,取消的权限2,...... on 数据库.数据表 from 用户@登录位置;

showgrants for 用户@登录位置;

备份和还原

冷备份:把数据库关闭,离线备份(使用cp、tar等命令直接备份数据库所存放的目录)

FRM 结构

MYI  索引

MYD  数据

快照备份:(利用逻辑卷)

逻辑备份:

mysqldump

备份:mysqldump -u 用户名 -p 数据库名 > /备份路径/备份文件名(备份单个数据库)

mysqldump-u 用户名 -p 数据库名 表名 > /备份路径/备份文件名(备份数据表)

--databases库1,库2 (此时还原--->mysql< 备份文件)

--all-databases—备份服务器中的所有数据库内容

还原:mysql 数据库 < 备份文件

mysqlhotcopy

备份:mysqlhotcopy--flushlog -u=’用户’ -p=’密码’--regexp=正则 备份目录

还原:cp-rpf 备份目录 数据目录(/var/lib/mysql)

补充的备份机制

1.日志备份

>mysqlshow global variables like ‘%log%’

列出mysql中和日志相关的变量

错误日志

服务器启动和关闭时的信息

服务器运行过程中的错误信息

从服务器启动从服务器进程时产生的信息

log-error      错误日志的路径

一般日志(不启用)

记录用户对数据库的查询操作

general-log=ON  启动一般查询日志

log=ON               全局日志开关

log-output         日志的记录类型

慢查询日志

记录需要较长时间的查询操作

log-slow-queries=保存路径  启动慢查询日志,并设置个路径

二进制日志

所有对数据库状态更改的操作(create、drop、update等)

log-bin=位置 启动二进制日志

>mysql  show binary logs  查看当前使用的二进制日志

>mysqlshow binlog events in ‘二进制日志(mysql-bin.000001)’ 查看二进制日志的内容

还原:(mysqlbinlog)

按时间还原:

mysqlbinlog  --start-datetime ‘YY-MM-DD HH:MM:SS’--stop-datetime ‘YY-MM-DD HH:MM:SS’ 二进制日志 | mysql(-urot -p)   

 按文件大小还原:

--start-position

--stop-position

事务日志:记录事务相关的日志信息

中继日志:记录从服务器的备份信息

2.多机备份

主从配置:实时备份

主主配置:(配置了2遍的主从)实时备份、负载均衡

多从一主:实时备份(更多的备份节点)

多主一从:实时备份、节约成本

 

实验

1.创建mysql的登录用户yzh可以登录mysql服务器

1.创建登录用户

# yum  install mysql-server –y

# servicemysqld start                           

wKiom1kw17fCFJ9LAABLS4l6RIg840.png

在另一台虚拟机上测试

wKioL1kw18rzMr1mAAEAf2AFy4g570.png


创建的用户为自己更改密码

wKiom1kw1-GiyyqbAAE5MQXU0YI980.png

root用户为其他用户找回密码

wKioL1kw1-6QRi-BAAA9mcb0iAQ556.png

root找回自己的密码并修改

wKiom1kw2A_BuJFHAAHIOAdVupM509.png

wKiom1kw2CjDavd-AADWQclzxDE339.png


数据库的增、删、改、查实验

创建数据库

wKioL1kw2HjQIj_5AADXcVA4_QY668.png

创建数据表

wKiom1kw2Izg_JdZAAEa5r0D0y0434.png

复杂一点的,,,

wKioL1kw2KCyLlvnAAES1OXunAw277.png

插入数据

wKioL1kw2LGBMRLMAADsVMV7RTQ697.png

wKioL1kw2MWgml2EAAD7eCECiaQ605.png

将表a2的数据复制到表a1

wKiom1kw2SSwxWAhAADUr-uYu60889.png

删除数据库

wKiom1kw2ULjQpMRAADpcIQexhg114.png

删除数据表

wKioL1kw2VXxu6EYAACLiZDmxN4882.png

删除表里的数据记录

wKiom1kw2WWg9jxpAAC36cZfHWc467.png

删除年龄在23-25之间的

wKiom1kw2XfwlM7UAAC-hzZ_PfA102.png

修改表中的数据

wKiom1kw2Yey4IZaAADODDpfv-k978.png

修改数据表的名称

wKioL1kw2ZfiiEjZAACCEsZi__A785.png

修改数据表的字段类型

wKiom1kw2aejuSwWAAEwNiM8om0902.png

修改数据表的字段

wKioL1kw2bjg5pPFAAFBYZkme3E292.png

添加字段

wKioL1kw2e2SFIb-AAEZZW0zwzM359.png

wKioL1kw2gGhuRSpAAF9dDmIE9g126.png

删除字段

wKioL1kw2hawNJ1oAADSQoPu1s8518.png

给用户授权

1.给用户全部权限

wKiom1kw2iTg5dCCAADKYjxsM5g635.png

取消yzh用户的删除库、表、表中数据的权限

wKioL1kw2jPTDmKkAAA8NGbS8h8977.png

查看用户的权限

wKiom1kw2kHBGgLYAADVCZA6yFw111.png

2.备份和还原数据库文件

单个备份命令mysqldump  -uroot -p  --databases  ab > /ab.sql

多个数据库的备份,数据库之间用空格隔开

mysqldump  -uroot -p  --databases  aa  ab> /1.sql

1.把数据库aa备份到/root目录下

wKioL1kw2mXQ3Wd5AACswCmyg-s634.png

2.模拟数据库aa丢失(删除数据库aa)

wKiom1kw2nizSf0uAACdFZnOcPA717.png

3.还原

wKioL1kw2oiB56n8AAFn8hDBedU768.png

注:此处可以会报错,如下:

wKiom1kw2pXByIkeAACRF7LNGg4910.png

解决方法为:

A、修改配置文件添加 skip-grant-tables 跳过密码验证。进入mysql后再修改root密码,

B、删除配置文件中的skip-grant-tables ,重启服务用新密码再进入!

1.备份多个数据库(--databases)

wKioL1kw2qSBBGUQAABMzndCkgk642.png

2.还原

wKiom1kw2rXhi0xwAADzqNA3OAw707.png

1.备份有规则的数据库

wKioL1kw2sihfZKTAAELgYcYTj0955.png

2.模拟数据库删除

wKiom1kw2tOz6TVSAAC_JvIpgIs619.png

3.还原

wKiom1kw2weAVwIPAAG_J8myXZQ564.png

wKioL1kw2wbSLbnUAAC28m9GF4A314.png

5.关于二进制日志还原(此处实验都没有成功,以后再试

开启二进制日志

wKioL1kw36qywOY_AAC5IMrgsl4625.png

查看二进制日志文件

wKioL1kw37jTBhhTAACaTblGkUE785.png

按时间还原:

1.如果数据库中的bb库被删,需要还原

wKiom1kw38WiJAzHAAAXUIgKxsM973.png

2.查看二进制日志内容

wKioL1kw39SQdnMdAADovyr4Eyk438.png

3.还原并查看

wKiom1kw3-jC0kjqAABqzQ6ybyc992.png


按文件大小还原:

还原到bb库被删除的数据状态

1.查看bb库被删除前后的文件大小

wKioL1kw4BexETjHAACPzfc-ea0478.png

2.还原并查看

wKiom1kw4CyhJz_rAAC_EgRlswY507.png

6.主从备份

前提条件:安装了mysql,开启了二进制日志

wKiom1kw4DqBYrdzAAENGwwq79o071.png

在主服务器上授权,从服务器保存授权的信息

wKioL1kw4EvgGNfOAADpCPO1WRY104.png


之后在从服务器会产生授权信息文件

wKiom1kw4GiQhykKAAEI59ciGhs270.png

开启从服务器start slave,并查看

wKiom1kw4HvTfpUDAAFJHw26T-U706.png

测试

wKiom1kw4JnzB9RxAAEdO8WfVqQ416.png

7.主主备份(直接将实验6的主从反向再配置一遍,也可做主主备份),本实验增加的参数只是为了提高效率,在数据库数据庞大的情况下,效果显著。

1.以1为主,2为从配置一遍主从

a)    在主配置文件中配置一下(开启二进制日志和其他内容)

wKiom1kw4MvRHxNwAAFUpbpY4rs541.png

b)    在2上做相同的配置

wKiom1kw4OnAClxIAACgVnvzRUo386.png

c)    启动服务器

wKioL1kw4PjxF0GIAAB0pppkH0U727.png

d)    在主服务器(1)上授权

wKioL1kw4QugpmN9AADQtZH1ReI499.png

e)    在从服务器(2)上保存授权信息

wKiom1kw4SHzjP20AADfOh289G0892.png

2.以2为主,1为从配置一遍主从

a)    在主服务器(2)上授权

wKioL1kw4VegY_kNAABySaIZth8121.png

b)    在从服务器(1)上保存授权信息

wKiom1kw4XDCbYiZAACMGL_h3d8982.png

3.开启从服务器start slave,并查看

wKioL1kw4YOzLZgbAAEpLKaWDo4337.png

4.测试

wKiom1kw4ZOQL8AgAAFD5hQfwmU763.png

8.多从一主

1.主服务器配置

a)    开启二进制日志,并开启mysql

wKiom1kw4aaxjMzYAAGmQ3ayQSI585.png


b)    在主服务器上授权

wKioL1kw4cnDFPjfAACxv-QuaKs896.png

2.从服务器配置

a)    开启二进制日志,并启动mysql

wKiom1kw4dujuxl6AAGSV6Hc7iQ742.png


b)    保存授权信息

wKioL1kw4ezivS-nAAEcXJ4cYpY127.png

c)    在另一台从服务器上做相同的配置

wKioL1kw4f2zwK9hAADRtFf22pU893.png

wKioL1kw4iXRtVJwAAEIMy5Xv3Q016.png


d)测试

wKiom1kw4jXCJoLbAADxwksGBJw444.png

9.多主一从

1.主服务器配置

a)   开启二进制日志,启动服务

wKiom1kw4kyihTOkAAD5dCK2BR0803.png

wKioL1kw4l_DdAz6AACP6c54ohE784.png

b)   授权

wKiom1kw4n2AkQhiAABLw1a2oVs925.png

c)   在主服务器2上做相同的操作

wKioL1kw4pqiEMfCAAF802GgnMU694.png

wKioL1kw4rrhmIoyAACREe8Xseg308.png


2.从服务器操作

a)   对主配置文件操作

wKiom1kw4tHj3Tn5AAE_RfP4aDk190.png

b)   初始化数据库,生成目录mysqla,mysqlb

wKiom1kw-rPDw8r8AAEu5wdG_-M726.png

wKioL1kw-tTisF9OAAD17YH_dos518.png


c)   设置mysqla,mysqlb目录及以下文件的属主的权限为mysql(防止出现权限问题)

wKioL1kw-uSRrE7fAABtkb4QKoo279.png

d)   启动从服务器线程


wKioL1kw-veQzWFaAAJVBWsl3Ao192.png

e)   登录并保存授权信

wKioL1kw-xKCYEKhAAHwswjKOlo706.png

       wKiom1kw-xDRyy1FAAGdOk6vJFA967.png


3.测试

wKiom1kw-42BjJpWAAEmvTOqwdI397.pngwKioL1kw-5qjZvARAAEcL6D3PZs966.png


10.读写分离

环境部署:

主服务器——192.168.115.191

从服务器——192.168.115.193

中间件服务器——192.168.115.192

中间件:一种提供在不同技术、不同的软件之间共享资源的程序

tomcat  weblogic

数据库的中间件:mysql proxy (官方版本) 性能低,需要lua脚本

atlas 性能低,相应时间长

amoeba陈思儒研发的

一.先搭建一个主从关系的服务器

1.在主、从服务器上安装mysql mysql-server

wKiom1kxC5TBqNiCAAExi06CI9Y598.png

2.开启二进制日志

wKioL1kxC6njo9LXAAE2tsNguGQ880.png


3.在主服务器上授权,从服务器上保存授权信息,并开启从服务线程。

   Master服务器

wKiom1kxC_Di3V7iAAA63wDeoDs751.pngwKiom1kxC_3w2S21AABnFd8IB_Y790.png


Slave服务器

wKiom1kxDCyBvuuaAAFuQ0W1epQ914.png

 

二.配置读写分离 (192.168.115.192中间件服务器上配置

1.安装gcc环境(amoeba需要源码安装)

wKiom1kxDEDx8ldeAADPEm92QQk701.png

2.拷贝第三方软件,创建单独的目录

wKiom1kxDFChVIvBAAD-7U0yaEE623.png


3.先安装jdk(amoeba是由java语言编写的,所以先安装jdk),配置java环境

wKiom1kxDG6TuTI3AAC0VX38SEI797.png

声明用java写出来的程序如何调用(/etc/profile)手动添加内容

wKioL1kxDLLw6HAVAAEOUk-ZbTM974.png

wKiom1kxDMOThX0gAABg6uCCW0A481.png

4.安装amoeba

a)   解压


wKiom1kxDPjQt_Z0AAEopWezwBg050.png

b)   配置amoeba这个软件

wKiom1kxDQiyxwGKAABu4rhszqg655.png

<server>.....</server>区域

wKiom1kxDS3z9fbLAADo_lxo8fA194.png

<dbServerList>......</dbServerList>区域

wKioL1kxDWrwEseJAAEpckoIqG4080.png


由于只提供了一个服务器模板,需要自己复制另一个填写关于读的(
直接复制64行到109行,插入在109行之后

wKioL1kxDZfgbxzIAAD-BNisZ1c046.png


修改下端的读写服务器

wKioL1kxDbDz7uybAAC0p880mbo526.png

c)启动amoeba

修改一下启动脚本 vim /usr/local/amoeba/bin/amoeba

wKioL1kxDcDimC8lAACAw3kJtwI983.png

先在主服务器191上开启amoeba用户的授权(从服务器自动同步)

wKioL1kxDc6gluAQAAA-TwwAApw454.png

再在193的amoeba服务器上开启amoeba服务

nohup bash -x /usr/local/amoeba/bin/amoeba& 把这个放到后台 退出终端也可以继续运行

wKiom1kxDduBOSruAABKsAakgmk958.png

ps aux | grep amoeba    然后查看一下运行的程序查看到的话就说明程序已经运行了起来

wKiom1kxDe-hFgXMAACKmCdBP6Y903.png

三.测试(安装一个MySQL 软件包 才可以连接)

    启动amoeba端的mysql服务 service mysqld start

wKioL1kxDhCT8foeAAB-wMzP6co215.png

使用配置文件中amoeba配置中的用户名和密码登录amoeba端的mysql服务

wKiom1kxDjOQGVA6AAEFNntYaeU511.png


关闭从服务器的从同步功能

wKioL1kxDkjjQtaSAAEgbctqI3M892.png

在主、从服务器上创建表a1,在主服务器的表中插入数据

wKiom1kxDmOhJ9XQAAD9k2-NGJU112.png

之后在客户端登录测试::::

读取池的效果:

wKioL1kxDm6Ryix3AACwEPw_rUE046.png

写入池效果

wKiom1kxDnywMKPTAAD-g6AZ_mw471.png

以上测试纯粹为了实验效果,在实际生产中,主从开启,主服务器上写入的数据也会同步到从服务器中。。。。。。