Centos7 Mysql集群主从搭建(包括单机搭建、单机主从搭建)

最近在工作中解决了一些Mysql主从集群相关的问题,本着每周进步一点点的态度将主从集群搭建的完整过程记录下来,特此记录便于日后查阅。

一、Mysql简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

二、准备工作

操作系统是Centos7,需要提前准备好 5.7.26 的Mysql安装包:

Mysql官方5.7.26下载地址

下载步骤如下所示:

 点击 Download 按钮后进行登录,登录完成后跳转到如下页面:

点击 Download Now 开始下载,最后将安装包上传到服务器的 /home 目录下。

三、Mysql主从集群搭建

3.1、单机搭建

我们需要在单节点上创建一个实例,相关环境如下:

将刚刚上传到服务器的安装包进行解压

$ cd /home
$ tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
$ mv ./mysql-5.7.26-linux-glibc2.12-x86_64/ ./mysql

添加MySQL数据库运行的用户和用户组

$ groupadd -r mysql
$ useradd -r -g mysql mysql

更改目录权限

    $ chown -R mysql:mysql /home/mysql/

创建软连接到 /user/bin 目录,之后我们就能够直接使用 mysql 命令了

    $ ln -s  /home/mysql/bin/mysql /usr/bin

初始化数据库

    $ /home/mysql/bin/mysqld --initialize --user=mysql --basedir=/home/mysql --datadir=/home/mysql/data

初始化完成后记住打印的内容,里面有初始化的登录密码(千万把密码记录下来,不然后面不能登陆)

创建 RSA 密钥

    $ /home/mysql/bin/mysql_ssl_rsa_setup --datadir=/home/mysql/data/

等待几秒后,如图所示:

设置开机自启动

    $ cp /home/mysql/support-files/mysql.server /etc/init.d/mysqld

 修改 /etc/init.d/mysqld 中的 basedir 和 datadir

  

加入开机自启动

    $ chkconfig mysqld on
    $ chkconfig --list mysqld

成功加入后,如图所示:

  

在全局配置文件中添加mysql可执行文件所在路径

    $ vim /etc/profile

加入以下内容

#mysql
export MYSQL_HOME=/home/mysql
export PATH=$MYSQL_HOME/bin

修改完成后保存,使配置文件生效

    $ source /etc/profile

删掉系统自带的/etc/my.cnf,在/home/mysql/conf/目录新建3306.cnf,并且将文件属性调整为mysql:mysql

    $ mkdir /home/mysql/conf/
    $ cd /home/mysql/conf/
    $ vim 3306.cnf

在配置文件中加入以下内容

[mysqld]
basedir = /home/mysql/
datadir=/home/mysql/data/
socket=/tmp/mysql.sock
log-error=/home/mysql/data/error.log
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
language=/home/mysql/share/english
# 设置监听开放端口 [多实例中一定要不同]
port=3306
# 设置运行用户
user=mysql
# 设置UTF-8编码
character-set-server=utf8
#自动清理 30 天前的log文件,可根据需要修改
expire_logs_days=30
#设置最大连接数
max_connections=1000
#设置最大等待时长(s)
wait_timeout=120
interactive_timeout=120
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

这里需要注意 mysql.sock 文件所在位置必须是 /tmp 目录下,否则会报找不到 sock 文件的错误。

将 /home/mysql/data/ 和 /home/mysql/conf 的所有子文件的拥有者全部更改为 mysql 用户

    $ chown -R mysql:mysql /home/mysql/data/ /home/mysql/conf/

修改完后,启动mysql

    $ /home/mysql/bin/mysqld --defaults-file=/home/mysql/conf/3306.cnf &

等待几秒完成后,使用初始化提供的密码进行登陆,如果有错误可以去 /home/mysql/data/error.log 查看日志信息

    $ mysql -u root -p

成功登录后,如图所示: 

  

登录上来后的第一件事就是修改初始化密码,我这里新密码是 openailab,大家自定义就好

    $ alter user user() identified by "";
    $ use mysql;
    $ update user set authentication_string = password('openailab'), password_expired = 'N', password_last_changed = now() where user = 'root';
    $ FLUSH PRIVILEGES;

如果 3306 端口没开就先开一下端口

$ firewall-cmd --zone=public --add-port=3306/tcp --permanent
$ firewall-cmd --reload

然后我们通过 Navcat 工具进行连接,如图所示:

  

这里的解决方案是修改 user 表中的Host为 %

$ mysql -u root -p
$ use mysql;
$ update user set Host = '%' where User = 'root';
$ FLUSH PRIVILEGES;

然后重新连接测试,问题解决,如图所示: 

  

到此单机搭建完成(数据备份的方法这里没有说,我会在下文中提到)。

3.2、单机主从搭建

搭建单机主从与单机的主要区别是在于配置文件的不同,我们基于上面的单机环境来进行改造

首先杀掉单机进程

    $ ps -aux|grep mysql
    $ kill -9 进程号

 然后修改删除 /home/mysql/data 文件夹下的所有东西,删除完后创建两个文件夹分别放两个实例的数据

    $ cd /home/mysql/data/
    $ rm -rf *
    $ mkdir 3306 3307

修改 3306.cnf 配置文件,添加Master节点相关内容

    $ vim /home/mysql/conf/3306.cnf

修改后如下:

[mysqld]
basedir = /home/mysql/
datadir=/home/mysql/data/3306/
socket=/tmp/3306.sock
log-error=/home/mysql/data/3306/error.log
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
language=/home/mysql/share/english
# 设置监听开放端口 [多实例中一定要不同]
port=3306
# 设置运行用户
user=mysql
# 设置UTF-8编码
character-set-server=utf8
#自动清理 30 天前的log文件,可根据需要修改
expire_logs_days=30
#设置最大连接数
max_connections=1000
#设置最大等待时长(s)
wait_timeout=120
interactive_timeout=120

#主数据库配置
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

 然后我们在 /home/mysql/conf/ 目录下新建 3307 实例所需要的配置文件

    $ vim /home/mysql/conf/3307.cnf

 添加如下内容:

[mysqld]
basedir = /home/mysql/
datadir=/home/mysql/data/3307/
socket=/tmp/3307.sock
log-error=/home/mysql/data/3307/error.log
server-id=2
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
language=/home/mysql/share/english
# 设置监听开放端口 [多实例中一定要不同]
port=3307
# 设置运行用户
user=mysql
# 设置UTF-8编码
character-set-server=utf8
#自动清理 30 天前的log文件,可根据需要修改
expire_logs_days=30
#设置最大连接数
max_connections=1000
#设置最大等待时长(s)
wait_timeout=120
interactive_timeout=120

#从数据库配置
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
master-info-repository=TABLE
relay-log-info-repository=TABLE
relay-log-recovery
binlog-format=ROW
read_only=1

 然后我们来初始化3306、3307的数据库实例

$ /home/mysql/bin/mysqld --defaults-file=/home/mysql/conf/3306.cnf --basedir=/home/mysql/ --user=mysql --initialize-insecure --explicit_defaults_for_timestamp
$ /home/mysql/bin/mysqld --defaults-file=/home/mysql/conf/3307.cnf --basedir=/home/mysql/ --user=mysql --initialize-insecure --explicit_defaults_for_timestamp

 分别启动两个实例

$ /home/mysql/bin/mysqld_safe --defaults-file=/home/mysql/conf/3306.cnf &
$ /home/mysql/bin/mysqld_safe --defaults-file=/home/mysql/conf/3307.cnf &

注意,这里我使用的命令是 /home/mysql/bin/mysqld_safe,而之前在搭建单机的时候我用的是 /home/mysql/bin/mysqld,后者的区别是开一个守护进程监视实例进程,当mysql实例挂了,守护进程会将实例立刻重启,所以造成的问题就是 mysql 实例永远都死不了,所以这里需要注意的是,如果你想要杀死 mysql 实例,则需要先杀死 mysqld_safe 实例后,才能杀死 mysql 实例。

验证实例启动成功,如图所示:

然后我们登录mysql对密码和Host配置进行修改(注意在多实例登录的时候需要明确是哪一个端口,否则会找不到 .sock 文件导致报错)

    $ mysql -uroot -p -P3306 -h127.0.0.1

 输入密码,登录成功后执行下面的命令修改配置

$ use mysql;
$ update user set Host = '%' where User = 'root';
$ update user set authentication_string = password('openailab'), password_expired = 'N', password_last_changed = now() where user = 'root';
$ FLUSH PRIVILEGES;

修改完成后通过Navcat工具连接数据库,如图所示:

  

此时我在Master数据库中创建oas.cloud的库,添加user表,录入数据,如图所示:

数据同步完成,到此单机主从搭建成功。

3.3、集群主从搭建

在两台机器分别启动 MySQL 实例

IP 系统 端口 MySQL版本 节点
192.168.3.204 Centos7 3306 5.7.26 Master
192.168.3.204 Centos7 3307 5.7.26 Slave
192.168.3.211 Centos7 3306 5.7.26 Master
192.168.3.211 Centos7 3307 5.7.26 Slave

通过mysql-cluster做到集群主从搭建,还需要再研究一下。。

3.4、数据备份

数据定时备份是非常重要的,我们一定要重视起来,这里我们通过Linux的定时任务来做数据备份,之前已经写过一篇相关的文章,传送门:

Centos7设置定时任务

通过以下命令进行SQL文件备份

    $ /home/mysql/bin/mysqldump -u root -p openailab -P 3306 --all-databases | gzip > ./backupfile_$(date +%Y%m%d%H%M%S).sql.gz

仅保留近7日的备份文件,脚本完整内容如下:

#! /bin/bash
t=$(date +%Y%m%d%H%M%S)
/home/mysql/bin/mysqldump -u root -p openailab -P 3306 --all-databases | gzip > /home/backup/mysql/data/backupfile_$t.sql.gz
find /home/backup/mysql/data -mtime 7 -type f|xargs rm -f

到此数据备份配置完成。

发布了352 篇原创文章 · 获赞 390 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/qq_19734597/article/details/94963410