CentOS下安装MariaDB数据库并配置主从同步复制

513 次查看 0 条评论
本文可能超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本文不保证相应的技术更新和实践可操作性。

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。进入MariaDB官网了解更多资料和下载软件。

1、使用 yum 在线安装

# 查看版本信息
yum info mariadb mariadb-server
# 安装
yum -y install mariadb mariadb-server
# 启动并设置开机自启动
systemctl start mariadb && systemctl enable mariadb

2、初始化MariaDB配置

mysql_secure_installation

根据向导一步步走即可。首先是设置密码,会提示先输入密码

Enter current password for root (enter for none):<–初次运行直接回车
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码

其他配置(生产环境使用安全处理)

Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

初始化 MariaDB 完成,接下来测试登录。

mysql -uroot -p

00711-rhaeu76w9xm.png

3、MariaDB主从复制配置

MySQL(MariaDB)的复制就是基于二进制日志而完成的,其工作原理如下:

当MySQL的Master节点的数据有更改的时候,Master会主动通知Slave,让Slave主动来Master获取二进制日志,于是Slave开启一个I/O thread线程,向Master请求二进制日志中记录的语句;Master将二进制日志中记录的语句发给Slave,Slave则将这些语句存到中继日志中,进而从中继日志中读取一句,执行一句,直到所有的语句被执行完。而经SQL语句从中继日志中读取出来,再一一执行的进程叫做SQL thread;将这些语句执行完之后,从节点的数据就和主节点的数据相同了,这就是所谓的MySQL主从复制。

73215-td81vpd8uu.png

3.1、配置环境说明

数据库角色IP操作系统 + 软件
Master10.1.2.3CentOS Linux release 7.5.1804 (Core) + Mariadb 5.5.60 x86_64
Slave10.1.2.4CentOS Linux release 7.5.1804 (Core) + Mariadb 5.5.60 x86_64

3.2、开始配置 Master 主库

以下操作在 Master 主服务器 10.1.2.3/etc/my.cnf上进行。

修改配置文件,这里我输出修改好后的内容做展示:

# 编辑配置文件
vim /etc/my.cnf
# 去除注释和空行展示
cat /etc/my.cnf | grep -v '#' | grep -v '^$'

53536-ci3hu1mr7xg.png

即在默认配置文件的 [mysqld] 段下增加了如下几行:

# 开启独立的表空间
innodb_file_per_table=NO
# 二进制日志存储目录,不指定则是默认使用datadir指向的目录
log-bin=/var/lib/mysql/master-bin
# 设置二进制日志格式
binlog_format=mixed
# 配置服务id标识,所有主从需要保证唯一性
server-id=1

修改好配置后重启 mariadb 服务:

systemctl restart mariadb.service

再次登录 mariadb 查看是否使用独立表空间(非主从同步必须):

show variables like '%per_table%';

76840-w81zyy0m65g.png

主库上创建帐号并赋予 replication 权限。从库,从主库复制数据时需要使用这个帐号进行:

# 创建一个slave账号,密码为123456,只允许从10.1.2.4登录
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.1.2.4' IDENTIFIED BY '123456';

67369-u3xhqh8bjv9.png

在从库 Slave 上登录测试成功。

47580-8vt63lhsj7s.png

备份数据库数据,用于导入到从数据库中。生产环境中为保证数据一致性,备份的时候是不让往库中写数据的,所以数据库要加锁,只能读。

FLUSH TABLES WITH READ LOCK;

02408-914hqe8r94p.png

记录 Master 主库bin-log文件及其当前位置:

SHOW MASTER STATUS;

05247-lvj06cnfxfb.png

记住 FilePosition 的部分,从库 Slave 服务器会用到。

执行备份数据库命令:

mysqldump -uroot -p --all-databases > /root/db.sql

数据备份完成后,就可以释放主库 Master 上的锁:

UNLOCK TABLES;

78369-aqeprfuj6p9.png

传输数据库备份文件到从库 Slave 服务器,稍后在从库上完成原始数据的还原。

# 如果需要请先安装 scp 软件包
yum install -y openssh-clients
scp /root/db.sql root@10.1.2.4:/tmp/

3.3、开始配置 Slave 从库

以下操作在主服务器 10.1.2.4/etc/my.cnf上进行。

导入主库 Master 的数据库备份到从库上:

mysql -uroot -p < db.sql

配置从库主从配置。以下操作在 Slave 主服务器 10.1.2.4/etc/my.cnf上进行。

在默认配置文件 /etc/my.cnf 的 [mysqld] 段下增加了如下几行:

# 开启独立的表空间
innodb_file_per_table=NO
# 服务id标识,所有主从需要保证唯一性
server-id=2
# 配置 Relay-log 日志路径,默认是按:主机名 + "-relay-bin" 格式生成
relay-log=/var/lib/mysql/relay-bin

保存配置后,重启 mariadb 服务。

systemctl restart mariadb.service

设置主从复制,并开始复制:

[root@Slave ~]# mysql -uroot -p
# 配置同步信息
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='10.1.2.3',MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='master-bin.000006', MASTER_LOG_POS= 395;
# 开启主从复制
MariaDB [(none)]> START SLAVE;
# 查看状态
MariaDB [(none)]> show slave status\G;

84053-mk38z431qa.png

注意:结果中 Slave_IO_RunningSlave_SQL_Running 必须为Yes ,如果不是,需要根据提示的错误修改。

如果信息配置错误可使用如下方修改:

CHANGE MASTER TO MASTER_HOST='10.1.2.3',MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='master-bin.000006', MASTER_LOG_POS= 395;

或者直接清除配置信息,然后重新配置即可。

# 停止 slave 复制
STOP SLAVE;
# 将使 SLAVE 忘记主从复制关系的位置信息和清理Relay Log
RESET SLAVE;
# 清空连接信息如:master host, master port, master user, or master password 信息
RESET SLAVE ALL;
SHOW SLAVE STATUS\G;

70606-6jyyrslulq.png

4、验证是否开始同步复制

在主库 Master 上新建数据库,做增删改查,然后在从库 Slave 上看是否一致。

主库 Master 上执行:

mysql -h10.1.2.3 -uroot -p
MariaDB [(none)]> create database test1;
MariaDB [(none)]> use test1;
MariaDB [test1]> create table `user` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `username` char(25) NOT NULL DEFAULT '' COMMENT '用户名',
  `password` char(32) NOT NULL DEFAULT '' COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户表';
MariaDB [test1]> insert into user (username,password) VALUES ('jack','123456');
MariaDB [test1]> select * from user;
MariaDB [test1]> exit

从库 Slave上 验证:

mysql -h10.1.2.4 -uroot -p
MariaDB [(none)]> use test1;
MariaDB [test1]> desc user;
MariaDB [test1]> select * from user;

检查发现已经主从复制成功了。万岁万岁!

14452-dwh0xwo7dm.png

这里只是学习模拟搭建,实际生产环境可能会遇到一些比较复杂问题。有空了再模拟一下有实时读写操作的,从一个独立库升级到主从环境的演练。


参考资料:

  1. centos 7 mariadb主从复制配置搭建详解步骤
  2. mariadb互为主从,读写分离
MySQL,CentOS MySQL

暂无评论,快来抢沙发。