MariaDB 的介绍


  • MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可

  • 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源(即: 收费)的潜在风险,因此社区采用分支的方式来避开这个风险

  • MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品

  • MariaDB 和 Mysql 的命令和使用方式都是完全一样的

MariaDB 的安装与启动


1. 配置 MariaDB 的 yum 源

  • 为什么不直接使用 epel.repo 的 yum 源进行安装?

    • 虽然 epel.repo 是存放着很多第三方软件的安装包,但是这些软件安装包有可能不是最新的

  • ① 在 yum 源存放目录下创建一个 mariadb.repo 源文件

touch /etc/yum.repos.d/MariaDB.repo

  • ② 配置 mariadb.repo 源

vim /etc/yum.repos.d/MariaDB.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. MariaDB 的安装

  • ① 安装 MariaDB

yum install MariaDB-server MariaDB-client -y

  • ② 启动 MariaDB

systemctl start mariadb
  • 管理 MariaDB 的相关命令

systemctl start mariadb  # 启动 MariaDB

systemctl stop mariadb  # 停止 MariaDB

systemctl restart mariadb  # 重启 MariaDB

systemctl enable mariadb  # 设置开机启动

初始化 MySQL(MariaDB)


  • 在确认 MySQL(MariaDB) 数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据 库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面 5 个 步骤

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

  • 执行初始化命令

mysql_secure_installation


MySQL(MariaDB) 中文配置


  • 使 MySQL(MariaDB) 数据库兼容中文,且只有在服务端与客户端为统一编码的时候才不会出现乱码情况

  • 查看 MySQL(MariaDB) 的编码

MariaDB [(none)]> \s


  • 进入 MySQL(MariaDB) 的配置文件

vim /etc/my.cnf

  • 添加配置项

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


  • 重启 MariaDB 

systemctl restart mariadb

  • 查看 MySQL(MariaDB) 的编码

MariaDB [(none)]> \s


MySQL(MariaDB) 的基本使用


  • 进入 MySQL(MariaDB) 数据库

mysql -u root -p

  • 查看所创建的数据库

MariaDB [(none)]> show databases;


  • 其他相关命令请查看MySQL笔记

MySQL(MariaDB)  主从复制


1. 主从复制的介绍

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

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

  • 在生产环境中,MySQL主从复制都是异步的复制方式,即不是严格的实时复制,但是给用户的体验都是实时的

  • MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,且有效的保护了服务器宕机的数据备份

2. 主从复制的使用场景

  • 利用复制功能当主服务器出现问题时,我们可以人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时的数据几乎完全一致

  • 复制功能也可用作数据备份,但是如果人为的执行drop,delete等语句删除,那么从库的备份功能也就失效了

3. 主从端的介绍

  • 主端可以理解为是一个服务器 或 数据库,一般用于读和写数据

  • 从端可以理解为是一个服务器 或 数据库,一般用于读取数据

4. 主从复制的逻辑架构

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


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


  • 双主主复制逻辑架构,此架构可以在 主端1(Master1)或 主端2(Master2) 进行数据写入,或者两端同事写入(需要特殊设置)


5. 主从复制的工作原理

    1. 用户往“主服务器”读写数据
    2. 将变动的数据,写入 binary.log 日志中,记录数据库的 sql 变化
    3. “从服务器” 与 “主服务器” 进行同步,然后“从服务器”开启一个线程,去读取“主服务器”的 binary.log 日志中的 sql 变动记录
    4. “从服务器” 将那些sql变动写入到自己的 relay.log 日志中
    5. 读取 relay.log 日志中的 sql ,然后在“从服务器”上执行一次


主从复制的配置


1. 引言

  • 本栏目的主从复制的配置架构选择的是 一主一从

  • 配置 一主一从 的架构需要两台服务器(即: 两台数据库)

2. 主端的配置

  • 进入主端 MySQL(MariaDB) 的配置文件

vim /etc/my.cnf

  • 添加配置项

    • server-id 服务的唯一标识 -> 用于区分谁是主端谁是从端
    • log-bin 启动二进制日志的名称为 xxx

[mysqld]
server-id=1
log-bin=Binary


  • 重启 MariaDB

systemctl restart mariadb

3. 主端添加从端账号

  • 进入主端数据库,创建一个用户用于主从同步,允许登录的从端是'10.0.0.5'

MariaDB [(none)]> create user 'Yeung'@'10.0.0.5' identified by '123';

    • 在较新的版本中创建用户的密码不能太简单,如果还是想设置简单密码代码如下

MariaDB [(none)]> set global validate_password_policy=0;

  • 进入主端数据库,给从端账号授权,说明给 yeung 从端数据库复制的权限

MariaDB [(none)]> grant replication slave on *.* to 'Yeung'@'10.0.0.5';

  • 进入主端数据库,刷新授权表,使得权限立即生效

MariaDB [(none)]> flush privileges;

  • 进入主端数据库,检查在主端创建的从端账号

MariaDB [(none)]> select user,host from mysql.user;

  • 进入主端数据库,检查授权账号的权限

MariaDB [(none)]> show grants for Yeung@'10.0.0.5';

4. 主从同步

  • 进入主端数据库,锁表 -> 防止在进行主从同步的时候有数据写入,导致数据混乱

MariaDB [(none)]> flush table with read lock;

  • 进入主端数据库,查看主端的状态

MariaDB [(none)]> show master status;

    • File : 二进制日志文件名

    • Position : 日志开始的位置

    • 后面从端会用到 后面从端会用到 后面从端会用到!!!!!!


  • 退出主端数据库,导出数据库的所有数据

    • 创建 data 文件夹

mkdir /data

    • 导出数据库的所有数据

mysqldump -u root -p --all-databases > /data/all.sql

  • 将导出的数据库数据远程传输到从端里

scp /data/all.sql root@10.0.0.5:/tmp/

  • 进入从端将接收到的数据库数据导入到从端数据库中

mysql -u root -p < /tmp/all.sql

  • 检查主端和从端的数据库是否一致


5. 从端的配置

  • 进入从端 MySQL(MariaDB) 的配置文件

vim /etc/my.cnf

  • 添加配置项

    • server-id 服务的唯一标识 -> 用于区分谁是主端谁是从端

[mysqld]
server-id=3


  • 重启 MariaDB

systemctl restart mariadb

  • 进入从端数据库,检查从端的各项参数

    • 检查日志文件是否开启

MariaDB [(none)]> show variables like 'log_bin';

    • 检查服务的唯一标识

MariaDB [(none)]> show variables like 'server_id';

  • 进入从端数据库,开启主从同步技术

MariaDB [(none)]> change master to master_host='10.0.0.3',
master_user='Yeung',
master_password='123',
master_log_file='Binary.000002',
master_log_pos=762;

change master to master_host='主端ip',
master_user='主端给从端创建的用户名',
master_password='主端给从端创建的用户名密码',
master_log_file='日志文件名(即: 在主端数据库中输入 show master status; 命令所显示的日志文件名)',
master_log_pos=日志开始的位置(即: 在主端数据库中输入 show master status; 命令所显示的日志开始的位置;


  • 进入从端数据库,启动从端数据库的同步开关,测试主从复制的情况

MariaDB [(none)]> start slave;

  • 进入从端数据库,查看同步状态

MariaDB [(none)]> show slave status\G;

    • 检查 Slave_IO_Running 和 Slave_SQL_Running 是否为 yes,如果都为 yes 那么代表主从复制配置成功


6. 收尾工作

  • 进入主端数据库,关闭锁表

MariaDB [(none)]> unlock tables;

  • 测试主从复制功能


7. 读写分离的配置

  • 此时主从复制已经配置完成,已经可以在主端写入数据,从端实时写入了,但是从端的权限太大,不仅能读取主端的数据,还能给从端数据库写入数据,所以需要配置读写分离

  • 修改从端的 MySQL(MariaDB) 的配置文件

vim /etc/my.cnf

[mysqld]
read-only=true


  • 进入主端数据库,创建一个普通用户,然后在从端上进行登录,查看是否只能读取数据

MariaDB [(none)]> create user 'Eric'@'%' identified by '123';

  • 进入主端数据库,给刚创建的普通用户配置只读权限

MariaDB [(none)]> grant select on *.* to 'Eric'@'%';

  • 进入主端数据库,刷新授权表,使得权限立即生效

MariaDB [(none)]> flush privileges;

  • 进入从端,使用刚创建的普通用户进行登陆进入数据库

    • 10.0.0.3 是当前章节中的主端 ip

mysql -h 10.0.0.3 -u Eric -p

  • 进入从端数据库,查看是否只有读取数据的功能,并且检查主从复制的功能是否正常运行