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

[[email protected]~]# yum install -y mariadb mariadb-server

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

4、命令启动MariaDB 服务

[[email protected]~]# systemctl start mariadb

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

[[email protected]~]# 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、查看数据库状态

[[email protected]~]# 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中

命令如下:

[[email protected] ~]# 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服务;

主节点:

[[email protected] ~]# systemctl restart mariadb

从节点:

[[email protected] ~]# 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)

启动从节点的中继日志:

[[email protected] ~]# 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)

发现测试复制是成功的;

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

时间: 2025-01-02 18:56:37

Mariadb5.5.52 主从复制集群的安装步骤的相关文章

FastDFS 集群的安装、配置、使用

FastDFS 集群的安装.配置.使用 FastDFS 介绍(参考:http://www.oschina.net/p/fastdfs) FastDFS 是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件 访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相册网站.视频网站等等. FastDFS 服务端有两个角色:跟踪器(tracker)和存储节点(storage).跟踪器主要做调度工作,在访问上起负载均衡的作用.存储节

在集群上安装Hive

1.先决条件 要求必须已经安装完成Hadoop,Hadoop的安装在之前的博文<VMware下Hadoop 2.4.1完全分布式集群平台安装与设置>有详细介绍过. 2.下载Hive安装包 当前最新版本为0.13.1,可以到官网下载最新版,下载地址为:http://archive.apache.org/dist/hive/ 下载完之后,将安装包解压,执行命令: [email protected] :~/Installpackage$ sudo tar -zxvf apache-hive-0.13

VMware下Hadoop 2.4.1完全分布式集群平台安装与设置

1 VM下Ubuntu安装和配置 1.1 安装Ubuntu系统 这个就不说了,不知道的可以去看看其他的博文. 1.2 集群配置 搭建一个由3台机器组成的集群: IP user/passwd hostname role System 192.168.174.160 hadoop/hadoop master nn/snn/rm Ubuntu-14.04-32bit 192.168.174.161 hadoop/hadoop slave1 dn/nm Ubuntu-14.04-32bit 192.16

mysql 主从复制集群搭建

话说一个正确的文章能敌千钧万马,一句善意的点拨能敌百万雄狮,一个好友的帮助能让你拨开云雾见青天.搭建mysql主从同步,这两天看网上的博客教程很多,当然,错误的文章会误导你很多,我就被误导了.现将这两天的搭建过程详细记录: 前期准备:关闭防火墙 关闭SELINUX 关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq  #保存退出 s

Ganglia监控Hadoop集群的安装部署[转]

Ganglia监控Hadoop集群的安装部署 一. 安装环境 Ubuntu server 12.04 安装gmetad的机器:192.168.52.105 安装gmond的机 器:192.168.52.31,192.168.52.32,192.168.52.33,192.168.52.34,192.168.52.35,192.168.52.36,192.168.52.37,192.168.52.38,192.168.52.105 浏览监控web页面的机器:192.168.52.105 二. 介绍

MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现

Technorati 标签: 那你魔鬼 一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读

Apache Hadoop集群离线安装部署(三)——Hbase安装

Apache Hadoop集群离线安装部署(一)--Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apache Hadoop集群离线安装部署(二)--Spark-2.1.0 on Yarn安装:http://www.cnblogs.com/pojishou/p/6366570.html Apache Hadoop集群离线安装部署(三)--Hbase安装:http://www.cnblogs.com/po

分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式处理,采用 flume 收集日志,发送到 kafka 队列做缓冲,storm 分布式实时框架进行消费处理,短期数据落地到 hbase.mongo中,长期数据进入 hadoop 中存储. 接下来打算将这其间所遇到的问题.学习到的知识记录整理下,作为备忘,作为分享,带给需要的人. 淘宝开源了许多产品组件

storm0.9.1 集群环境安装配置

Storm安装配置 三台机器  131,132,133 需要安装 jdk,python,autoconf-2.64,zeromq-3.2.2,jzmq 安装jdk和python不详细说. 1  安装 autoconf-2.64, 1.1 下载 http://download.chinaunix.net/download.php?id=29328&ResourceID=648 上传到lunix上的工作目录 比如  /home/bigdata/ 解压  tar -xvf   autoconf-2.6