mariadb

基于tcp/3306端口,单进程(读取配置文件、服务)多线程(响应多个用户请求);
主键维护各表关系;

分类

事务回滚引擎:事务是一组组合成逻辑工作单元的操作,虽然系统中可能会出错,但事务将控制和维护事务中每个操作的一致性和完整性。
内存存储引擎:在内存中放数据,用于网站提速;

来源baidu:
MyISAM: 拥有较高的插入,查询速度,但不支持事务
InnoDB :5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定
BDB: 源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性
Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失
Merge :将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用
Archive :非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差
Federated: 将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
Cluster/NDB :高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。
BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继
另外,Mysql的存储引擎接口定义良好。有兴趣的开发者通过阅读文档编写自己的存储引擎。

mariadb配置

server:
#yum -y install mariadb-server
或#yum groupinstall mariadb
#vim /etc/my.cnf //在开头加
innodb_file_per_table=1  //每表一个空间
log-bin=/var/lib/mysql/bin-log //sql日志
#########忘记root密码,加这两行脱离网络、消除权限。
skip-grant-tables=1  //取消权限,无密码访问
skip-networking=1   //脱离网络
#systemctl restart mariadb.service
#systemctl enable mariadb.service
#systemctl stop firewalld.service
#mysql_secure_installation //安全初始化,加密码
#mysql -uroot -predhat
>show databases; //展示数据库
>use xxxx;  //使用xxx库
>show tables; //展示表
>desc tbname;  //查看tbname表
>create database xxx; //创建xx库
>use xxx;
>create table tbname (id int(xx),name char(20)); //创建表
>insert into tbname (id,name) values (x,'xxx');//查询表 \G纵向查看
>update tbname set name='ccc' where id=2;//改表
>delete from tbname where name=ccc; //删表
>create user yonghuming@x.x.x.x identified by 'xxx';//创建管理用户
>grant select on *.* to yonghuming@x.x.x.x;
>grant all on *.* to yonghuming@x.x.x.x identified by 'xxxx';//授权
>flush privileges; //刷新授权表
>revoke select on *.* from yonghuming@x.x.x.x;//移除授权
###########忘记root密码,修改主配,修改权限
#mysql
>update user set password=password('xxxxx') where user='root' and host='localhost';

desktop:
#mysql -uwode -predhat -h172.25.0.11

备份数据库

冷备:直接拷贝(异步),基于日志;
DRBD实时备份(同步);
日志:二进制、错误、事务、查询(慢查询、中继查询)
1、mysqldump基于二进制文件

backup:
#vim /etc/my.cnf
log-bin=/var/lib/mysql/bin-log
innodb_file_per_table = 1
#systemctl start mariadb
#mysqldump -uroot -predhat --all-databases --lock-all-tables --flush-logs > xxxxx.dump
//全备数据库 锁表(之后下一日志建立) 刷新日志
#mysqlbinlog -d xxxx bin-log.00000X > bbb.dump
//导出xxx库 位置文件 导出某库文件到路径
#mysql -uroot -predhat < xxxxxx.dump  //导入某库文件
#mysql -uroot -predhat bbb < bbb.dump

2、lvm快照
基于二进制日志,需锁表;

#fdisk /dev/vdb
n
p
1

+3G
w
#partprobe /dev/vdb
#ls /dev/vdb(tab)
#pvcreate /dev/vdb1
#vgcreate vg0 /dev/vdb1
#lvcreate -L 1G -n lvm vg0
#mkfs.ext4 /dev/vg0/lvm
#blkid /dev/vg0/lvm >> /etc/fstab
#vim /etc/fstab
UUID=""  /mnt/lvm ext4 defaults 0 0 
#mkdir /mnt/lvm 
#mount -a
#mkdir /mnt/lvm/data
#chown mysql:mysql data
#vim /etc/my.cnf
log-bin=/var/lib/mysql/bin-log
innodb_file_per_table = 1
datadir=/mnt/lvm/data
#setenfoce 0
#systemctl start mariadb
#mysql -uroot -predhat
>flush tables with read lock; //锁表
>unlock tables;
>set sql_log_bin=0;
>set sql_log_bin=1;
########快照
#lvcreate -L 2G -n kuaizhao -s /dev/vg0/lvm
#mkdir /mnt/lvm2
#mount /dev/vg0/kuaizhao /mnt/lvm2
#cp /mnt/lvm2 /mnt/lvm/data //快照恢复
#chmod mysql:mysql /mnt/lvm/data
#mysqlbinlog -d databasename bin-log.00000X > xxxx.dump
>show master status\G

3、xtrabackup工具包

Xtrabackup:
#wget http://172.25.254.254/content/ruanjian/percona-xtrabackup-2.2.9-5067.el7.x86_64.rpm
#yum -y install percona-xtrabackup-2.2.9-5067.el7.x86_64.rpm
#mkdir /backup
全备工具
#innobackupex --user=root --password=redhat /backup
增量
#innobackupex --user=root --password=redhat --incremental /backup --incremental-basedir=/backup/2017-07-05_14-30-38
恢复前准备:合并两个文件,准备成一个;
#innobackupex --apply-log --redo-only /backup/2017-07-05_14-30-38
//使数据达到一致
#innobackupex --apply-log --redo-only /backup/2017-07-05_14-30-38 --incremental-dir=/backup/2017-07-05_14-36-47
恢复
#innobackupex --copy-back /backup/2017-07-05_14-30-38/
主从数据库搭建:
ServerX:
#yum -y install mariadb-server
#vim /etc/my.cnf
log-bin=/var/lib/mysql/bin-log  //二进制日志
server-id = 100
#systemctl restart mariadb.service
#systemctl stop firewalld.service
#mysql
>grant replication client,replication slave on *.* to repl@172.25.0.10 identified by 'redhat';用户repl
>flush privileges;刷新授权
>show master status\G
从服务器
DesktopX:
#yum -y install mariadb-server
#vim /etc/my.cnf
relay-log=/var/lib/mysql/relay-log中继日志
server-id = 200
#systemctl start mariadb.service
#systemctl stop firewalld.service
#mysql
>change master to master_host='172.25.0.11', master_user='repl', master_password='redhat', master_log_file='bin-log.000003', master_log_pos=xxx;
//xxx是server查看staus
>slave start;
>show slave status\G