MariaDB数据库的起源

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。
开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

Red Hat Enterprise Linux/CentOS 7.0 发行版已将默认的数据库从 MySQL 切换到 MariaDB。

1.配置MariaDB官方yum源

添加 MariaDB yum 仓库

首先添加 MariaDB 的 yum源 配置文件 MariaDB.repo 文件。

1. 编辑创建mariadb.repo仓库文件
vi /etc/yum.repos.d/MariaDB.repo 2. 添加repo仓库配置
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

2.在Centos7上安装并启动MariaDB

1.安装
当 MariaDB 仓库地址添加好后,你可以通过下面的一行命令轻松安装 MariaDB。 yum install MariaDB-server MariaDB-client -y 2.启动
在centos中操作mariadb数据库的相关命令是:

systemctl start mariadb  #启动MariaDB

systemctl stop mariadb  #停止MariaDB

systemctl restart mariadb  #重启MariaDB

systemctl enable mariadb  #设置开机启动

3. 初始化MariaDB

在确保MariaDB正确运行后执行下面命令进行初始化

mysql_secure_installation

这条命令执行以后会出现一个交互页面, 提示你输入或确定某些事情

➢ 设置 root 管理员在数据库中的密码值(注意,该密码并非 root 管理员在系统中的密码,这里的密码值默认应该为空,可直接按回车键)。
➢ 设置 root 管理员在数据库中的专有密码。
➢ 是否删除删除匿名账户,
➢ 是否可以使用 root 管理员从远程登录数据库,以确保数据库上运行的业务的安全性。 
➢ 是否删除默认的测试数据库,取消测试数据库的一系列访问权限。
➢ 是否刷新授权列表,让初始化的设定立即生效。

4. MariaDB数据库的编码设置

编码格式是针对database来说的, 可以更改某个database的编码格式

alter database db1 charset gbk;

还可以查看某个database在创建时使用的编码格式

MariaDB [(none)]> show create database db02;
+----------+---------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------+
| db02 | CREATE DATABASE `db02` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)

当数据存到某个库中, 就已经使用了这个库当前的编码格式, 之后再修改库的编码, 对之前的数据是没有作用的

** 在配置文件中指定编码格式即可, 已经有的配置项不需要重复配置, 主要配置和character相关的配置项

vim /etc/my.cnf

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
server-id=1
log-bin=mysqls14-bin
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

在数据库中查看默认的编码格式

MariaDB [(none)]> \s  # 查看编码的命令, 相当于status
--------------
mysql Ver 15.1 Distrib 10.1.37-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 13
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 10.1.37-MariaDB MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8

UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 1 hour 1 min 47 sec Threads: 3 Questions: 465 Slow queries: 0 Opens: 66 Flush tables: 1 Open tables: 60 Queries per second avg: 0.125
--------------

5. MariaDB数据库的常用操作

MariaDB数据库的操作和mysql是一样的

6. MariaDB数据库备份和恢复备份

mysqldump 用于数据库备份

[root@master ~]# mysqldump -u root -p --all-databases > /tmp/db.dump

将备份好的数据恢复到数据库中

方式一
source \tmp\db.dump # 这个source是在mysql的命令行下执行的, 不是linux的source 方式二
[root@master ~]# mysql -uroot -p < /tmp/db.dump

7.MariaDB主从复制

MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上。

MySQL数据库支持单向、双向、链式级联,等不同业务场景的复制。在复制的过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(slave),接收来自Master上binlog文件的日志内容,解析出SQL,重新更新到Slave,使得主从服务器数据达到一致。

主从复制的逻辑有以下几种

一主一从,单向主从同步模式,只能在Master端写入数据

一主多从

还有一种同步方式: 双主主复制逻辑架构,此架构可以在Master1或Master2进行数据写入,或者两端同事写入(特殊设置)

在生产环境中,MySQL主从复制都是异步的复制方式,即不是严格的实时复制,但是给用户的体验都是实时的。
MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,且有效的保护了服务器宕机的数据备份。

主从复制的应用场景

利用复制功能当Master服务器出现问题时,我们可以人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时的数据几乎完全一致。
复制功能也可用作数据备份,但是如果人为的执行drop,delete等语句删除,那么从库的备份功能也就失效了.

主从机制的实现原理

(1) master将改变 记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将记录翻译成它自己的数据。

主库配置

查看数据库状态
systemctl status mariadb 停止mariadb
systemctl stop mariadb 修改配置文件
vim /etc/my.cnf 修改内容
[mysqld]
server-id=1
log-bin=mysql-bin 解释:
  server-id服务的唯一标识(主从之间都必须不同)
  log-bin启动二进制日志名称为mysql-bin 重启mariadb
systemctl start mariadb

主库添加用户, 备份数据, 发往从库

1.新建用于主从同步的用户chaoge,允许登录的从库是'192.168.178.130'
create user 'sath'@'%' identified by 'redhat'; 2.#题外话:如果提示密码太简单不复合策略加在前面加这句
mysql> set global validate_password_policy=0; 3.给从库账号授权,说明给sath这个用户从库复制的权限,在任意机器上复制
grant replication slave on *.* to 'sath'@'%';
#检查主库创建的复制账号
select user,host from mysql.user;
#检查授权账号的权限
show grants for chaoge@'192.168.178.130'; 实现对主数据库锁表只读,防止数据写入,数据复制失败
flush table with read lock; 4.检查主库的状态
MariaDB [(none)]> show master status
-> ;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 575 | | |
+------------------+----------+--------------+------------------+
row in set (0.00 sec)
File是二进制日志文件名
Position 是日志开始的位置。后面从库会用到 后面从库会用到 后面从库会用到!!!!!! 5.锁表后,一定要单独再打开一个SSH窗口,导出数据库的所有数据,
[root@oldboy_python ~ 19:32:45]#mysqldump -uroot -p --all-databases > /data/all.sql
6.确保数据导出后,没有数据插入,完毕再查看主库状态
show master status;
7.导出数据完毕后,解锁主库,恢复可写;
unlock tables;
8.将备份导出的数据scp至Slave数据库
scp /data/all.sql root@192.168.178.130:/data/

从库配置

1.设置server-id值并关闭binlog功能参数
数据库的server-id在主从复制体系内是唯一的,Slave的server-id要与主库和其他从库不同,并且注释掉Slave的binlog参数。
2.因此修改Slave的/etc/my.cnf,写入
[mysqld]
server-id=3
3.重启数据库
systemctl restart mariadb
4.检查Slava从数据库的各项参数
show variables like 'log_bin';
show variables like 'server_id';
5.恢复主库Master的数据导入到Slave库
导入数据(注意sql文件的路径)
mysql>source /data/all.sql;
方法二:
#mysql -uroot -p < abc.sql
6.配置复制的参数,Slave从库连接Master主库的配置
mysql > change master to master_host='192.168.178.129',
master_user='sath,
master_password='redhat',
master_log_file='mysql-bin.000001',
master_log_pos=575;
7.启动从库的同步开关,测试主从复制的情况
start slave;
8.查看复制状态
show slave status\G;

查看从库的同步状态

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.119.10
Master_User: chaoge
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1039
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 537
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Slave_IO_Running, Slave_SQL_Running是两个线程, 都为YES是表示主从同步的状态为OK

Linux之MariaDB的更多相关文章

  1. 搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]环境

    备注:,将我的博客内容整理成册,首先会在博客里优先发布,后续可能的话整理成电子书,主要从linux的最基础内容开始进入Linux的Mono开发方面的话题.本文是我整理博客内容的一篇文章. LJMA 是 ...

  2. linux中mariadb的安装

    在Linux中mariaDB的安装 MariaDB其实就是MySQL的分支,是为了应对MySQL的即将的闭源风险所产生的. Linux系统中软件包的格式为mysql.rpm格式. 通过yum去安装 L ...

  3. linux下mariadb的下载与卸载

    Linux下mariadb的安装 使用阿里云的mariadb yum install mariadb-server mariadb -y 启动mariadb数据库 systemctl start/st ...

  4. linux初学者-MariaDB图形管理篇

     linux初学者-MariaDB图形管理篇 MariaDB不仅有文本管理方式,也有借助工具的图形管理方式.其图形管理的工具是"phpmyadmin".这个软件可以在"p ...

  5. Linux安装MariaDB(Mysql)和简单配置 mariadb

    Linux安装MariaDB(Mysql)和简单配置 1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动Ma ...

  6. Linux安装mariadb二进制版本

    上一篇说了mariadb编译安装过程,但在生产环境中一般使用发布好的二进制版本,由于安装过程和之前一样,不再详细叙述,只是简单概括一下安装过程: 1. 下载 地址为:https://downloads ...

  7. Linux安装MariaDB+初始化数据库

    背景说明: 在数据库中,mysql的是常用的数据库之一:作为一款开源的软件被广大公司所使用. 但是,mysql在被Oracle公司收购后,难免在以后会有取消开源的问题.所以急需一款新的数据库产品替换m ...

  8. Linux上mariadb数据库(博客初学者使用测试)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发,他早前曾以10亿美元的价格,将自己创建的公司M ...

  9. Linux安装mariadb详细步骤

    1.安装mariadb yum和源码编译安装的区别? 1.路径区别-yum安装的软件是他自定义的,源码安装的软件./configure --preifx=软件安装的绝对路径 2.yum仓库的软件,版本 ...

随机推荐

  1. maven学习(一)setting.xml配置文件详解

    maven环境搭建: 1.官网下载zip包,解压至任意目录(如:E:\wly\apache-maven-3.2.5) 2.环境变量MAVEN_HOME(E:\wly\apache-maven-3.2. ...

  2. JSP禁用缓存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);

    JSP禁用缓存的方式    使用服务器端控制AJAX页面缓存:        response.setHeader( "Pragma", "no-cache" ...

  3. MySQL中AddDate函数的疑惑

    无论使用哪一种RDBMS,都需要使用到其中的一些日期转换函数,在使用MySQL的AddDate函数时,遇到了点小问题,稍作记录. root@localhost:mysql3376.sock [(non ...

  4. laravel5.4学习笔记

    1.安装laravel可以直接用composer安装,然后用laravel new xxx来新建项目 服务器上安装了composer(php包管理工具)以后, composer global requ ...

  5. 免费的SSL证书,你值得拥有!Let's Encrypt 试用体验记录

    早上收到 Let’s Encrypt 的邮件,说偶之前申请的已经通过了,于是马上开始试用.Let’s Encrypt 是一个新的数字证书认证机构,它通过自动化的过程消除创建和安装证书的复杂性,为网站提 ...

  6. June 06th 2017 Week 23rd Tuesday

    At the touch of love, everyone becomes a poet. 一谈到爱,每个人都变成了一位诗人. Sweet words always have the power o ...

  7. selenium + python(鼠标操作)

    关于最近学习selenium自动化测试鼠标操作的一些总结 常见的鼠标操作

  8. HDU 3038 How Many Answers Are Wrong 【YY && 带权并查集】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3038 How Many Answers Are Wrong Time Limit: 2000/1000 ...

  9. ThreadLocal 例子

    /** * 一个ThreadLocal代表一个变量,故其中里只能放一个数据,有两个变量都要线程内共享,则要定义两个ThreadLocal. */ public class ThreadLocalTes ...

  10. java GZIP 压缩数据

    package com.cjonline.foundation.cpe.action; import java.io.ByteArrayInputStream; import java.io.Byte ...