环境:
简介:
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
如对本文有疑问, 点击进行留言回复!!
服务器Centos部署MySql并连接Navicat过程详解
网友评论