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 个 步骤
- 输入 root 管理员在数据库中的密码(注意,该密码并非 root 管理员在系统中的密码,这里的密码值默认应该为空,可直接按回车键)
- 设置 root 管理员在数据库中的新密码
- 随后删除匿名账户,并使用 root 管理员从远程登录数据库,以确保数据库上运行的业务的安全性
- 删除默认的测试数据库,取消测试数据库的一系列访问权限
- 刷新授权列表,让初始化的设定立即生效
- 执行初始化命令
mysql_secure_installation
数据库_files/TIM截图201912281507282.jpg)
MySQL(MariaDB) 中文配置
- 使 MySQL(MariaDB) 数据库兼容中文,且只有在服务端与客户端为统一编码的时候才不会出现乱码情况
- 查看 MySQL(MariaDB) 的编码
MariaDB [(none)]> \s
数据库_files/Image.png)
- 进入 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
数据库_files/Image [1].png)
- 重启 MariaDB
systemctl restart mariadb
- 查看 MySQL(MariaDB) 的编码
MariaDB [(none)]> \s
数据库_files/Image [2].png)
MySQL(MariaDB) 的基本使用
- 进入 MySQL(MariaDB) 数据库
mysql -u root -p
- 查看所创建的数据库
MariaDB [(none)]> show databases;
数据库_files/Image [3].png)
- 其他相关命令请查看MySQL笔记
MySQL(MariaDB) 主从复制
1. 主从复制的介绍
- MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上
- MySQL数据库支持单向、双向、链式级联,等不同业务场景的复制。在复制的过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(slave),接收来自Master上binlog文件的日志内容,解析出SQL,重新更新到Slave,使得主从服务器数据达到一致
- 在生产环境中,MySQL主从复制都是异步的复制方式,即不是严格的实时复制,但是给用户的体验都是实时的
- MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,且有效的保护了服务器宕机的数据备份
2. 主从复制的使用场景
- 利用复制功能当主服务器出现问题时,我们可以人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时的数据几乎完全一致
- 复制功能也可用作数据备份,但是如果人为的执行drop,delete等语句删除,那么从库的备份功能也就失效了
3. 主从端的介绍
- 主端可以理解为是一个服务器 或 数据库,一般用于读和写数据
- 从端可以理解为是一个服务器 或 数据库,一般用于读取数据
4. 主从复制的逻辑架构
- 一主一从,单向主从同步模式,只能在主 (Master) 端写入数据
数据库_files/ms1.jpg)
- 一主多从,单向主从同步模式,只能在主 (Master) 端写入数据
数据库_files/ms2.jpg)
- 双主主复制逻辑架构,此架构可以在 主端1(Master1)或 主端2(Master2) 进行数据写入,或者两端同事写入(需要特殊设置)
数据库_files/ms3.jpg)
5. 主从复制的工作原理
- 用户往“主服务器”读写数据
- 将变动的数据,写入 binary.log 日志中,记录数据库的 sql 变化
- “从服务器” 与 “主服务器” 进行同步,然后“从服务器”开启一个线程,去读取“主服务器”的 binary.log 日志中的 sql 变动记录
- “从服务器” 将那些sql变动写入到自己的 relay.log 日志中
- 读取 relay.log 日志中的 sql ,然后在“从服务器”上执行一次
数据库_files/msyl.jpg)
主从复制的配置
1. 引言
- 本栏目的主从复制的配置架构选择的是 一主一从
- 配置 一主一从 的架构需要两台服务器(即: 两台数据库)
2. 主端的配置
- 进入主端 MySQL(MariaDB) 的配置文件
vim /etc/my.cnf
- 添加配置项
- server-id 服务的唯一标识 -> 用于区分谁是主端谁是从端
- log-bin 启动二进制日志的名称为 xxx
[mysqld]
server-id=1
log-bin=Binary
数据库_files/Image [4].png)
- 重启 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 : 日志开始的位置
- 后面从端会用到 后面从端会用到 后面从端会用到!!!!!!
数据库_files/Image [5].png)
- 退出主端数据库,导出数据库的所有数据
- 创建 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
- 检查主端和从端的数据库是否一致
数据库_files/Image [6].png)
5. 从端的配置
- 进入从端 MySQL(MariaDB) 的配置文件
vim /etc/my.cnf
- 添加配置项
- server-id 服务的唯一标识 -> 用于区分谁是主端谁是从端
[mysqld]
server-id=3
数据库_files/Image [7].png)
- 重启 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; 命令所显示的日志开始的位置;
数据库_files/Image [8].png)
- 进入从端数据库,启动从端数据库的同步开关,测试主从复制的情况
MariaDB [(none)]> start slave;
- 进入从端数据库,查看同步状态
MariaDB [(none)]> show slave status\G;
- 检查 Slave_IO_Running 和 Slave_SQL_Running 是否为 yes,如果都为 yes 那么代表主从复制配置成功
数据库_files/Image [9].png)
6. 收尾工作
- 进入主端数据库,关闭锁表
MariaDB [(none)]> unlock tables;
- 测试主从复制功能
数据库_files/Image [10].png)
7. 读写分离的配置
- 此时主从复制已经配置完成,已经可以在主端写入数据,从端实时写入了,但是从端的权限太大,不仅能读取主端的数据,还能给从端数据库写入数据,所以需要配置读写分离
- 修改从端的 MySQL(MariaDB) 的配置文件
vim /etc/my.cnf
[mysqld]
read-only=true
数据库_files/Image [11].png)
- 进入主端数据库,创建一个普通用户,然后在从端上进行登录,查看是否只能读取数据
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
- 进入从端数据库,查看是否只有读取数据的功能,并且检查主从复制的功能是否正常运行
数据库_files/Image [12].png)