标签:支持 blog ble 软件包 star 分支 水平 缓存 tps
环境:
简介:
MariaDB的优点:
查看是否安装MariaDB rpm包:
rpm -qa | grep MariaDB
在 CentOS 7.4 默认源中的 MariaDB 仍为5.x版本,当需要 10.x 版本时,可通过添加第三方源实现:
echo -e "[MariaDB]\nname = MariaDB\nbaseurl = http://yum.MariaDB.org/10.3/centos7-amd64\ngpgkey=https://yum.MariaDB.org/RPM-GPG-KEY-MariaDB\ngpgcheck=1" > /etc/yum.repos.d/MariaDB-10.3.repo
官方源比较慢的情况,可以使用清华镜像源(根据需要执行yum clean all):
echo -e "[MariaDB]\nname = MariaDB\nbaseurl = https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.3.9/yum/centos/7.4/x86_64/\ngpgkey=https://yum.MariaDB.org/RPM-GPG-KEY-MariaDB\ngpgcheck=1" > /etc/yum.repos.d/MariaDB-10.3.repo
安装MariaDB客户端(包含MariaDB-common、MariaDB-client下载9MB 安装50M):
yum install -y MariaDB.x86_64
安装MariaDB服务端(包含MariaDB-common、MariaDB-client、MariaDB-server):
yum install -y MariaDB-server.x86_64
查看 MariaDB 安装的文件:
rpm -ql MariaDB-server
或 rpm -ql MariaDB-client
目录文件 | 说明 |
---|---|
/etc/my.cnf |
默认配置文件 |
/var/lib/mysql/ |
文件夹下是 MariaDB 数据库目录、错误日志和 socket 文件 |
mysql |
mysql cli 客户端 |
mysqldump |
备份工具,基于 mysql协议 向 mysqld 发起查询,将结果转化为insert语句导出。 |
mysqladmin |
基于 mysql协议 管理 mysqld。 |
mysqlimport |
mysql 导入工具 |
注意:
启动MariaDB服务:
service mariadb start
初始化(为root设置密码,删除测试数据库、匿名用户):
/usr/bin/mysql_secure_installation
登录mysql查看版本:
mysqladmin version -p123123
一键卸载MariaDB且清除MariaDB数据(便于调试):
yum -y remove `rpm -qa | grep MariaDB` && rm -rf /var/lib/mysql
允许root远程访问:
GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123123‘ WITH GRANT OPTION;
精确到列的权限:
GRANT SELECT(Id,Name) ON testdb.Users TO testuser@‘%‘ IDENTIFIED BY ‘123123‘
重载授权表:
FLUSH PRIVILEGES;
忘记root密码:
MySQL按照标准SQL定义了4种隔离级别,较低的隔离级别,能带来更高的并发和更低的系统开销。
select ... for update
备注:
set tx_isolation=‘READ-UNCOMMITTED‘;
调整当前 session 隔离级别select @@tx_isolation
查看当前 session 隔离级别show processlist;
查看 mysql 连接状态在4种隔离级别中又分别存在不同的读问题:
T1:select * from users where id = 1;
T2:insert into `users`(`id`, `name`) values (1, 'foo'); -- 事务未提交
T1:select * from users where id = 1; -- 会读到
T1:select * from users where id = 2;
T2:insert into `users`(`id`, `name`) values (2, 'foo');
T2:commit;
T1:select * from users where id = 2; -- 会读到
T1:select * from users where id = 3; -- 判断是否有 Id = 3 的数据,没有则插入
T2:insert into `users`(`id`, `name`) values (3, 'bar'); -- 执行成功
T1:insert into `users`(`id`, `name`) values (3, 'bar'); -- 执行失败,由于 T1 发生幻读,不能支持该业务执行
T1:select * from users where id = 3;
T2:update `users` set `name` = 'baz' where `id` = 3; -- 执行失败,由于 Id = 3 的数据被锁
注意:
在同1次连接上,上次事务未提交,执行 start transaction;
。会自动提交该连接上次的修改。
在 MVCC 之前,RC 和 RR 隔离级别是怎么工作?
在 MVCC 之前,是单纯依赖锁的机制实现隔离级别。
当T1修改1条数据时加上排他锁,T2事务的读操作会被阻塞。当T1提交或回滚,锁被释放时,才能读取到提交的数据。但一般应用都是读多写少,导致系统处于大量的等待中,非常低效。
有了 MVCC 机制后,效果是怎么样?
有了 MVCC 后,当数据被修改时,会生成1个副本出来供其他事务读取。不会出现阻塞情况,读的性能会大幅提升。只有 SERIALIZABLE 级别的读操作才有可能被阻塞。(MVCC应用在RC和RR隔离级别上)
MVCC 具体如何实现的?
undo log:记录了原始数据的多个副本,用来回滚和提供其他事务读取
readview:记录了活动事务Id,用来确定可见哪个副本
事务提交过程及日志变化:
commit:
注意:
主从复制能提供水平扩展 数据备份 数据分析 高可用性等,故开启主从复制越来越必要。
MariaDB 主从复制工作3步:
配置复制:
配置主服务器:
[mysqld]
log_bin = mysql-bin
server_id = 1 # 唯一,可以用IP地址的末几位
从服务器:
[mysqld]
log_bin = mysql-bin
server_id = 2
log_slave_updates = 1 # 重放同时写到binlog
relay_log = /var/lib/mysql/mysql-relay-bin
注意:
SHOW MASTER STATUS\G
查看stop slave; reset slave;
默认复制是单向异步的,也支持半同步复制功能(MariaDB 10.3 后内置不需要单独安装插件)。
set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_wait_point = AFTER_SYNC;
set global rpl_semi_sync_slave_enabled = 1;
semi配置:
配置项|推荐配置值|说明
rpl_semi_sync_master_enabled|ON|开启主库半同步复制
rpl_semi_sync_master_timeout|10000|最多等待从库响应10s
rpl_semi_sync_master_wait_no_slave|ON|当没有从节点时(从节点突然断开)是否继续等待
rpl_semi_sync_master_wait_point|AFTER_SYNC|控制Wait Slave ACK的时机
rpl_semi_sync_slave_enabled|ON|开启从库半同步复制
原理:
相当于有异步复制、半同步复制还有个全同步复制,代表为 mysql-cluster性能太差,需要等待所有slave都同步才commit成功(性能太差)
注意:
从MariaDB 10.0.2开始,GTID会自动启用,在 binlog 中的每个事件组(事务)都会先记录1个GTID。
全局事务ID(简称GTID)由三个用短划线“ - ”分隔的数字组成。例如:0-1-10
为什么要使用GTID:
如何配置:
CHANGE MASTER TO master_use_gtid = { slave_pos | current_pos | no }
完整:CHANGE MASTER TO master_host = "127.0.0.1", master_user = "root", master_use_gtid = current_pos;
select @@gtid_slave_pos 可查看slave最后1个gtid。
select @@gtid_current_pos 可查看当前服务器执行的最后1个gtid。
注意:
在MariaDB 5.5和MariaDB 10.0中,MariaDB Galera Server是一个独立的软件包,而不是标准的MariaDB Server软件包。从MariaDB 10.1开始,MariaDB Server和MariaDB Galera Server软件包已经合并,并且在安装MariaDB时会自动安装Galera软件包及其依赖项。Galera部件在配置之前保持休眠状态,如插件或存储引擎。
相比于复制、半同步复制,Galera集群相当于是同步复制。其实现原理完全与 binlog 没有任何关系。
配置步骤:
ini [galera] # Mandatory settings wsrep_on=ON # rpm -ql galera.x86_64 -> /usr/lib64/galera/libgalera_smm.so wsrep_provider=/usr/lib64/galera/libgalera_smm.so # DNS名称也有效,IP是性能的首选 wsrep_cluster_address="gcomm://172.17.145.110, 172.18.0.2" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2
注意:
命令 | 说明 |
---|---|
mysqld --verbose --help | less |
查看默认配置及配置说明 |
cat /etc/my.cnf | grep -v ‘^#‘ | grep -v ‘^$‘ |
查看去除注释后的配置文件 |
show [global] variables; |
查看配置 |
set [global] name=value; |
修改配置 |
配置项 | 默认值 | 推荐值 | 说明 |
---|---|---|---|
autocommit | on | off | 是否开启自动提交,默认开启,所有修改操作都会自动开启1个事务,并提交。(影响性能) |
skip-name-resolve | false | true | 跳过IP反解为域名过程,默认关闭,所有连接都会反解IP为域名。(影响性能以及授权) |
innodb_flush_log_at_trx_commit | 1 | 1 | 在事务提交时确保redolog持久化 |
innodb-file-per-table | true | true | 独立表空间,每1个表都以独立文件存储 |
sync_binlog | 0 | 1 | 在事务提交时确保binlog持久化 |
(配置项会不断更新比较重要的)
监控可使用 Zabbix 对MariaDB 做监控。
(实现原理是通过查询 MariaDB 的状态变量实现)
本文地址:https://www.cnblogs.com/neverc/p/9870088.html
标签:支持 blog ble 软件包 star 分支 水平 缓存 tps
原文地址:https://www.cnblogs.com/neverc/p/9870088.html