千家信息网

Mariadb5.5.52 主从复制集群的安装步骤

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,mariadb-5.5.52主從複製集群安裝步驟一.因为网站业务对于数据读取一致性要求非常高,所以mariadb数据库就必须要用主从复制集群的形式来满足业务需求二.复制配置过程简介有两台Mariadb
千家信息网最后更新 2024年11月28日Mariadb5.5.52 主从复制集群的安装步骤

mariadb-5.5.52主從複製集群安裝步驟

一.因为网站业务对于数据读取一致性要求非常高,所以mariadb数据库就必须要用主从复制集群的形式来满足业务需求


二.复制配置过程简介

有两台Mariadb数据库服务器db01和db02,db01为主服务器,db02为从服务器,初始状态时,db01和db02中的数据信息完全相同,当db01中的数据发生变化时,db02也会跟着发生相应的变化,使得db01和db02的数据信息同步,从而达到备份的目的。


要点:

负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制变更日志,这个日志记载着需要传输给从服务器的各种修改动作。

因此,主服务器必须激活二进制日志功能。从服务器必须具备足以让它连接主服务器并请求主服务器把二进制变更日志传输给它的权限。

配置主从复制的过程:

1).主节点操作步骤

(1)启用二进制日志

(2)设置一个在当前集群中唯一的server-id;

(3)创建一个有复制权限(replication slave,replication client)帐号;

2).slave节点的操作步骤

(1)启用中继日志;

(2)设置一个在当前集群中唯一的server-id;

(3)使用有复制权限的用户帐号连接至主服务器,并启动复制线程;

注意:

(1)、服务器版本:主从服务器版本一致;

如果版本不一致,必须保证从服务器的版本高于主服务器的版本;

(2)、如果mariadb数据库的隔离级别为可读,其二进制日志格式尽量使用基于行的;


实验环境:

服务器版本为:

CentOS 7.2 64bit

数据库软件版本为:

mariadb-5.5.52

db01节点的IP地址:172.16.22.8

db02节点的IP地址:172.16.22.6


三.yum 安装Mariadb数据库

删除全部MySQL/MariaDB相关的rpm包

MySQL 已经不再包含在 CentOS 7 的源中,而改用了 MariaDB;

1、使用rpm -qa | grep mariadb搜索 MariaDB 现有的包:

如果存在,使用rpm -e --nodeps mariadb-*全部删除


2、使用rpm -qa | grep mysql搜索 mysql现有的包:

如果存在,使用yum remove mysql mysql-server mysql-libs compat-mysql全部删除;


我比较推荐使用系统自带的mariadb,这样直接yum安装即可

3、yum安装mariadb

[root@~]# yum install -y mariadb mariadb-server

#注:mariadb为数据库客户端,mariadb-server是数据库服务器端


4、命令启动MariaDB 服务

[root@~]# systemctl start mariadb


5、查看mariadb进程服务是否在跑

[root@~]# ps -ef | grep mariadb

root 10131 10095 0 19:24 pts/2 00:00:00 grep --color=auto mariadb

mysql 10197 10009 0 Jan19 ? 15:56:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/lib/mysql/zgz.pid --socket=/var/lib/mysql/mysql.sock


6、查看数据库状态

[root@~]# systemctl status mariadb


7、接着运行 mysql_secure_installation初始化配置MariaDB:

我觉得可以在这个阶段修改设定数据库密码,除了Disallow root login remotely 、Remove test database and accesss to it 可以為n,其他都是y。主要看你个人的实际需求进行设定。


8、登录 MariaDB 并创建相应的数据库用户与数据库

(1)使用mysql -uroot -p登录,回车之后会提示输入密码。

(2)创建新用户,CREATE USER 'git'@'localhost' IDENTIFIED BY '$password';其中$password填写自己设置的密码。当然后面也可以修改;

(3)设置存储引擎

mariadb[none]> set storage_engine=INNODB;

(4)创建数据库

mariadb[none]>create database database_name character set utf8;

(5)设置用户权限

grant all privileges on *.* to 'root'@'%' identified by '$password' with option;

#上述可以定义为使root用户授予任何机器都可以远程连接的最高权限,并具有授予其他人连接权。

#注:主从数据库Mariadb都可以按照上述安装方式安装即可。

四.数据库主从复制

1.主节点db01配置

对master进行配置,包括打开二进制日志,指定唯一的servr ID。

vim /etc/my.cnf,在[mysqld]这个配置段加入如下内容:

[mysqld]

#二进制变更日志

log-bin=mysql-bin

#二进制日志格式为混合模式

binlog_format=mixed

#为主服务器db01的ID值

server-id = 1


2.从节点db02配置:


配置/etc/my.cnf在[mysqld]这个配置段加入如下内容:

log-bin=mysql-bin

binlog_format=mixed

server-id = 12

relay-log = relay-bin

log_slave_updates = 1

read_only = on


#注:

server_id是必须且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置;

如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。

relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。

有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。故尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并不是很实用,特别是那些需要在slave上创建表的应用。


3.在Master节点db01的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。用户名的密码都会存储在文本文件master.info中

命令如下:

[root@db01 ~]# mysql -u root -p

#建立一个帐户mysql_sync,并且只能允许172.16.22.6这个IP来登陆,密码是mysql_sync。

MariaDB [(none)]> grant replication client,replication slave on *.* to 'mysql_sync'@'172.16.22.6' identified by 'mysql_sync';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)


4.拷贝数据

关停Master服务器,将Master中的数据拷贝到从服务器节点中,使得Master和slave中的数据同步,并且确保在全部设置操作结束前,禁止在Master和slave服务器中进行写操作,使得两数据库中的数据一定要相同!

但如果你的两台服务器是属于完全新安装的MariaDB主从服务器,这个一步就不需要。因为新建的数据库没有什么数据。


5.主从节点都重启mysqld服务;

主节点:

[root@db01 ~]# systemctl restart mariadb


从节点:

[root@db02 ~]# systemctl restart mariadb


6.启动从节点的中继日志

接下来就是让slave连接master,并开始重做master二进制日志中的事件。使用CHANGE MASTER TO语句取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。

命令介绍如下:使用help change master to即可查看命令选项


CHANGE MASTER TO option [, option] ...

option:

MASTER_BIND = 'interface_name'

| MASTER_HOST = 'host_name' 主服务器地址

| MASTER_USER = 'user_name' 有复制权限的用户名

| MASTER_PASSWORD = 'password' 用户密码

| MASTER_PORT = port_num 主服务器的端口

| MASTER_CONNECT_RETRY = interval 连接重试时间间隔

| MASTER_HEARTBEAT_PERIOD = interval 心跳检测时间间隔

| MASTER_LOG_FILE = 'master_log_name' 主服务器二进制日志文件

| MASTER_LOG_POS = master_log_pos 二进制日志文件中的位置

| RELAY_LOG_FILE = 'relay_log_name' 中继日志文件名称定义

| RELAY_LOG_POS = relay_log_pos 中继日志时间点定义

| MASTER_SSL = {0|1} 下面都都是跟SSL安全传输相关的

| MASTER_SSL_CA = 'ca_file_name'

| MASTER_SSL_CAPATH = 'ca_directory_name'

| MASTER_SSL_CERT = 'cert_file_name'

| MASTER_SSL_KEY = 'key_file_name'

| MASTER_SSL_CIPHER = 'cipher_list'

| MASTER_SSL_VERIFY_SERVER_CERT = {0|1}

| IGNORE_SERVER_IDS = (server_id_list)


需要记录的二进制日志文件的时间点是最后的那个点,我们先去主服务器节点查看哪个时间点,因为是新服务器,主节点上没什么重要数据:

MariaDB [(none)]> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000007 | 426 | | |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


启动从节点的中继日志:

[root@db02 ~]# mysql -uroot -p$password

#查看只读打开与否;

MariaDB [(none)]> show global variables like '%read_only%';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| innodb_read_only | OFF |

| read_only | ON |

| tx_read_only | OFF |

+------------------+-------+

3 rows in set (0.01 sec)


#启动中继日志的命令如下;

MariaDB [(none)]> change master to master_host='172.16.22.8',master_user='mysql_sync',master_password='mysql_sync',master_log_file='mysql-bin.000007',master_log_pos=426,master_connect_retry=5,master_heartbeat_period=2;

Query OK, 0 rows affected (0.07 sec)


#查看从服务器状态;

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

*************************** 1. row ***************************

Slave_IO_State:

Master_Host: 172.16.22.8

Master_User: mysql_sync

Master_Port: 3306

Connect_Retry: 5

Master_Log_File: mysql-bin.000007

Read_Master_Log_Pos: 426

Relay_Log_File: relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000007

Slave_IO_Running: No

Slave_SQL_Running: No

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 426

Relay_Log_Space: 248

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: NULL

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 0

Master_SSL_Crl:

Master_SSL_Crlpath:

Using_Gtid: No

Gtid_IO_Pos:

1 row in set (0.00 sec)


#通过查看从服务器状态,我们知道了从服务器的IO线程和SQL线程还未开启,下面我们就开启从服务器节点的复制进程,实现主从复制;

MariaDB [(none)]> start slave;

Query OK, 0 rows affected (0.00 sec)


#再次查看从服务器状态,主要关注IO线程和SQL线程的开启状况:

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

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.16.22.8

Master_User: repluser

Master_Port: 3306

Connect_Retry: 5

Master_Log_File: mysql-bin.000007

Read_Master_Log_Pos: 426

Relay_Log_File: relay-bin.000002

Relay_Log_Pos: 535

Relay_Master_Log_File: mysql-bin.000007

Slave_IO_Running: Yes #IOthread是否运行,如果为No代表slave运行不正常

Slave_SQL_Running: Yes #SQLthread是否运行,如果为No代表slave运行不正常

……中间信息略......

Seconds_Behind_Master: 0

slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。测试在下面进行,我们先来看看主从节点的线程的状态;


7.查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接:

在Master节点db01上输入show processlist\G;

MariaDB [(none)]> show processlist \G

*************************** 1. row ***************************

Id: 5

User: mysql_sync

Host: 172.16.22.6:52875

db: NULL

Command: Binlog Dump

Time: 477

State: Master has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

Progress: 0.000

*************************** 2. row ***************************

Id: 6

User: root

Host: localhost

db: NULL

Command: Query

Time: 0

State: init

Info: show processlist

Progress: 0.000

2 rows in set (0.00 sec)

1.row为处理slave的I/O线程的连接。


在Slave服务器节点db02上运行该语句:

MariaDB [(none)]> show processlist \G

*************************** 1. row ***************************

Id: 5

User: root

Host: localhost

db: NULL

Command: Query

Time: 0

State: init

Info: show processlist

Progress: 0.000

*************************** 2. row ***************************

Id: 6

User: system user

Host:

db: NULL

Command: Connect

Time: 587

State: Waiting for master to send event

Info: NULL

Progress: 0.000

*************************** 3. row ***************************

Id: 7

User: system user

Host:

db: NULL

Command: Connect

Time: 587

State: Slave has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

Progress: 0.000

3 rows in set (0.00 sec)

上述的2.row为SQL线程状态、3.row为I/O线程状态。


8.主从复制测试;

我们在主节点db01上创建数据库表格进入到test数据库

数据库存储引擎尽量是innodb


创建表格完成后我们到主节点查看:

MariaDB [(none)]> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| test |

+--------------------+

4 rows in set (0.03 sec)


MariaDB [(none)]> use test

Database changed

MariaDB [test]> show tables;

+-------------------+

| Tables_in_test |

+-------------------+

| test |

+-------------------+

1 rows in set (0.00 sec)


到从节点查看复制状态,可以看出复制已经进行了;

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

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.16.22.8

Master_User: mysql_sync

Master_Port: 3306

Connect_Retry: 5

Master_Log_File: mysql-bin.000007

Read_Master_Log_Pos: 8640

Relay_Log_File: relay-bin.000002

Relay_Log_Pos: 8849

Relay_Master_Log_File: mysql-bin.000007

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 8640

Relay_Log_Space: 9140

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_SSL_Crl:

Master_SSL_Crlpath:

Using_Gtid: No

Gtid_IO_Pos:

1 row in set (0.00 sec)


查看从节点的数据库复制完成与否,可以查看出我们导入的test数据库表格是存在的:

MariaDB [(none)]> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| test |

+--------------------+

4 rows in set (0.02 sec)

MariaDB [(none)]> use test;

Database changed

MariaDB [test]> create table test;

MariaDB [test]> show tables;

+-------------------+

| Tables_in_hellodb |

+-------------------+

| test |

+-------------------+

1 rows in set (0.01 sec)


发现测试复制是成功的;

至此,数据库的主从复制就完成了.

服务 数据 服务器 日志 数据库 节点 二进制 线程 配置 主从 状态 用户 密码 文件 权限 版本 中继 运行 命令 时间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 宁波工业软件开发流程八个步骤 数据库语句脚本 like 重庆前端软件开发哪家专业 幻塔服务器怎么换大区 宇泰串口服务器电源灯不亮 佛山市云库网络技术有限公司 用友U852数据库在哪里 学生网络安全教育材料 服务器后面管理接口有几个 武汉新远在线网络技术有限公司 选修三 网络技术应用试题 串口服务器和智能网关的区别 信息网络安全包括() 查询数据库url 信息处理与网络安全心得体会 网络安全等级保护的关键词 现代网络技术pdf下载 数据库查询语言列名为中文 武汉 网络安全 政策 成都java直销软件开发 建立sql怎么数据库连接 网络技术建设与运维 数据库自增量最大值 计算机网络技术研究生毕业去向 银行业网络安全监管要求 网络安全法以后的网络法规 网游一定要进服务器吗 小强的明日之后服务器是哪个 plsql插入数据库缺失逗号 数据库期末考题库
0