MySQL笔记(未完)

##数据库

数据库简单地分为两种:

  1. 关系型数据库---->MySQL和Oracle
  2. 非关系型数据库---->Memcached 和Redis
  3. 消息队列中间列

关系型数据库   SQL数据库

数据和数据之间是有关系的。通过关系能够将一系列数据都提取出来。

非关系型数据库  NoSQL数据库 (Not only SQL)

关系型数据库MySQL和Oracle区别

其实,这两类数据库在使用方式上,大体是没有太多区别。都是基于SQL查询方式的数据库。但是Oracle是闭源的,也就是收钱的,收了钱自然就好办事,出了问题,有人管。因此,运维并不需要花费太多精力在Oracle上 。要学,去企业学。

   MySQL呢?是开源的,免费用的。免费的东西自然是需要我们运维来维护的。但是通常来说,真正的数据库维护人员的职位叫做DBA=database administrator,他并不是广泛意义上的运维。只是数据库专业运维。对于广泛意义上的运维维护人员来说,我们在2万薪资以下只需要简单了解MySQL。

市面上还有一种数据库,关系型,叫做MariaDB。

MySQL数据库最早是开源的,当然现在也是开源的。但是,MySQL已经被Oracle公司===>SUN,他被收购了。那么,MySQL一旦闭源了,怎么办?因此MySQL运维社区的人,为了防止SUN公司对MySQL进行闭源操作,他们自主在MySQL最后一个开源版本的基础上,开放出来了一个分支数据库,叫做MariaDb。其实他和MySQL是几乎一样的。

B/S架构模式与C/S架构模式的区别

B/S==>Web/Server

用户通过Web浏览器打开输入域名就能访问服务器Server的方式叫B/S,

用户不需要安装任何东西

C/S==>Client/Server

所谓客户端Client在用户的电脑是需要下载并安装的。

##编译安装MySQL

  1. rpm -qa | grep mysql

查看电脑里有没有mysql,如果有mysql-server删除

rpm -e mysql-server --nodeps

  1. 安装ncurses-devel与cmake

yum -y install ncurses-devel

cmake需要编译 需要cmake-2.8.6包

tar xf cmake-2.8.6.tar.gz -C /usr/src/

cd /usr/src/cmake-2.8.6

./configure && gmake && gmake install

  1. 安装MySQL

 tar xf mysql-5.5.22.tar.gz -C /usr/src/

cd /usr/src/mysql-5.5.22/

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all && make && make install

  1. 创建mysql程序用户

useradd -M -s /sbin/nologin mysql

       bin命令目录 data数据目录 support files 提供了很多模板比如启动脚本和 配置文件 scripts 脚本

  1. 修改mysql安装目录的属主和属组

cd /usr/local/      chown -R mysql:root /usr/local/mysql

  1. 创建修改my.cnf配置文件

/bin/cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

my-huge.cnf 巨大数据量  my-innodb-heavy-4G.cnf innodb引擎

my-large.cnf 大数据量 my-medium.cnf 测试使用 my-small.cnf 小数据量

  1. 设置启动脚本

/bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 

启动脚本

chmod +x /etc/init.d/mysqld

chkconfig mysqld --add

chkconfig mysqld --list

  1. 添加MySQL命令执行的路径到PATH环境变量

echo “export PATH=$PATH:/usr/local/mysql/bin” >>/etc/profile

   也可以创建软连接

      ln -s /usr/local/mysql/bin/* /usr/local/bin/

  1. 执行mysql_install_db 脚本初始化数据库

/usr/local/mysql/scripts/mysql_install_db --user=mysql

--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

  1. 启动mysql服务   mysql端口3306

/etc/init.d/mysqld start

netstat -antup | grep 3306

  1. 连接并登陆mysql

-h 指定主机 不写默认本地  -P 端口 默认3306 -p指定密码

设置mysql密码

mysqladmin -uroot password  ‘102846’

mysql用户有两部分组成

用户名@登陆的IP

mysql -uroot -p102846

##数据库操作

SQL分类

DDL 数据定义语言  增删改>库。表、索引   create,drop

DML 数据操控语言  增删改>数据 insert,update,delete

DQL 数据查询语言  查询数据        select

DCL 数据控制语言

##建库、删库、建表、删表、查库、查表

show databases;查看数据库列表信息

use 数据库民; 使用库

show tables;查看数据库中的数据表信息

create database 数据库名;创建数据库

drop database 数据库名;删除数据库

create table users(user_name char(20) not null,user_passwd char(30) default ‘’,primary key(user_name)); 创建表 char字符 not null 不能为空 default ‘’默认为空,primary索引关键字

describe 表名; 显示表的字段(结构)  可以简写  desc 表名;

drop table 表名;删除表

##四种对表数据进行操作的SQL语句

增:insert into 表名[字段名] values 具体数值

删:delete from 表名 where 条件

改:update 表名 set 字段=’数值’

查:select 字段名 from 表名

insert into users values (‘xiaohong’,‘666666’);不写字段默认插入所有字段,有几个字段就要插入几个值

insert into users (user_name) values (‘xiaoming’);

delete from users;删除表所有数据

delete from users where user_name=’xiaoming’;指定删除的位置

update users set user_passwd=’888888’ where user_name=’xiaoming’;

只改user_name=’xiaoming’ 的 user_passwd 。不指定条件改全部

select * from users;  *查看所有数据 需要先use 库

select * from yunjisuan.users; 查看数据 无需use

##权限设置

mysql是写在缓冲里的,是异步存入磁盘

mysql -uroot -p102846 -e‘select * from yunjisuan.user’ 查看磁盘内容

flush privileges  刷新立刻同步到磁盘,立即生效

###修改密码的方法

update mysql.user set password=passwprd(‘666666’) where host=’localhost’;

修改权限后必须刷新同步

###用户权限

  1. 修改用户权限(如果没有此账号,则创建用户)

grant all on *.* to ‘root’@’192.168.200.161’ IDENTIFIED BY ‘123456’

all 代表所有权限(select delete update insert) *.*所有库所有表

添加权限不用输入密码

撤销权限

revoke select on *.* from ‘yunjisuan’@’192.168.200.135’

添加权限会叠加

  1. 客户端下载mysql-client

yum -y install mysql

  1. 远程登录mysql

mysql -uyunjisuan -p123123 -h 192.168.200.129

      查看账号和IP select user,host from mysql.user;

      查看登录的账号 select user();

      查看当前登录用户权限 show grants;

      查看其它用户权限 show grants for ‘用户名’@’IP地址’

撤销权限

revoke select on *.* from ‘yunjisuan’@’192.168.200.135’

_:任意单个字符

%:任意多个字符

##MySQL日志管理

MySQL日志包括:

错误日志 /use/local/mysql/data/主机名.err

通用查询日志  一般不开

二进制日志

慢速查询日志

记录所有执行时间超过最长时间的SQL语句,可用于找到执行时间长的查询,以用于优化。默认未开启。

开启方法

vim /etc/my.cnf

[mysqld]

long_query_time=5

log-slow-queries=mysql_slow.log

##索引

索引的分类

普通索引:这是最基本的索引类型,而且没有唯一性之类的限制

唯一性索引:与普通索引基本相同,区别在于:索引列的所有值都只能出现一次,即必须唯一,但可为空。

主键:是一种特殊的唯一索引,必须制定为“PRIMARY KEY”,具有唯一性的同时不能为空。

全文索引:

单列索引与多列索引:索引可以是单列上创建的索引,也可以是多列上创建的索引。

##事物

事物具有四个性质:ACID

原子性、一致性、隔离性、持久性

begin 开始一个事物

commit提交一个事物

rollback回滚一个事物

show variables like ‘%autocommit%’; 查看系统全局变量,查看自动提交是否开启

set autocommit=0 // 禁止自动提交

set autocommit=1 //开启自动提交

上面是临时修改,永久修改要在配置文件中添加

##数据库备份

分类

完全备份:每次对数据进行完整的备份

      优点:备份与恢复操作简单方便

      缺点:数据存在大量的重复;占用大量空间;备份与恢复时间长

增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会

小企业每天一次全备份

大企业每周一次全备 每天都在增备

##完全备份

全备命令 mysqldump 热备份

也可以打包data目录,但是只能在mysql未使用状态才可以 冷备份

  1. 创建备份目录

mkdir backup

  1. mysqldump -uroot -p102846 yunjisuan > /backup/yunjisuan-$(date +%F).sql

备份yunjisuan库,对单个库备份

mysqldump -uroot -p102846 --databases mysql auth > /backup/mysql+auth-$(date +%F).sql

备份多个库 --databases

mysqldump -uroot -p102846 --opt --all-databases >/backup/mysql_all.$(date +%F).sql

备份所有库 --opt加快备份速度,当备份数据量大时使用

mysqldump -uroot -p102846 auth user >/backup/auth_user-$(date +%F).sql

备份auth库中的user表

mysqldump -uroot -p102846 -d mysql user >/backup/desc_mysql_user-$(date +%F).sql

备份mysql.user的结构

###恢复备份

在mysql里 交互方式

soutce /backup/mysql_all.20160505.sql;

非交互方式

mysql -uroot -p102846 < 备份路径

##增量备份

mysqlbinlog二进制日志

my.cnf

第52行 max_binlog_size=1024000 // 二进制日志最大1M

51 log-bin=mysql-bin   开启二进制日志

命令mysqlbinlog

flush logs; 刷新二进制日志

mysqlbinlog --stop-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | myself -uroot -p102846

从日志开头截止到某个时间点恢复

mysqlbinlog --start-datetime=年-月-日 小时:分钟:秒’ 二进制日志 | myself -uroot -p102846

从某个时间点到日志结尾恢复

mysqlbinlog --start-datetime=年-月-日 小时:分钟:秒’ --stop-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | myself -uroot -p102846

从某个时间点到某个时间点恢复

mysqlbinlog --stop-position=’操作 id’ 二进制日志 | mysql -uroot -p102846

mysqlbinlog --start-position=’操作 id’ 二进制日志 | mysql -uroot -p102846

基于位置进行恢复

show master status; 查看位置

mysqlbinlog 增量备份文件 | mysql -uroot -p102846

备份的二进制日志内容全部恢复

##在企业中如何去应用MySQL的备份策略

  1. 中小公司,由于数据量小,数据安全不是特别重要,允许小数量的细节数据丢失。因此,每天进行一次数据库的全量备份即可。定时任务+全备脚本
  2. 中大型公司,由于数据量大,每天全备时间太长,而且,比较关注数据安全和完整,无法承受数据丢失,哪怕只是少量的。对于这种类型的公司,我们通常采取全量备份+增量备份的方式来进行,也就是每周进行一次全量备份===>定时任务+全备脚本;每天进行一次增量备份,binlog二进制日志的方式。

###中小企业场景,数据库的全量备份如何实现?

  1. 推送

采用rsync备份服务器的话;

数据库的定时任务备份结束以后,自动rsync推送到备份服务器。

  1. raid阵列

在MySQL服务器上,额外进行raid磁盘阵列的挂载在/backup,全备脚本将备份到此目录中。

###中大型或大型企业,MySQL备份策略如何实现

  1. 全备+增备
  2. 每周一次全备
  3. 增备的实现两种方式

第一种:通过定时任务+增备切割推送脚本

每天0点,flush logs;

第二种,不推,实时同步rsync+inotify

每周的全量备份结束以后,进行一次flush logs

###数据库常用架构

1.主从同步,主从复制,读写分离

猜你喜欢

转载自www.cnblogs.com/AmberHart/p/9829435.html
今日推荐