CentOS7上实现mysql数据库主从备份

时间:2020-8-22 作者:admin


CentOS7上实现mysql主备机备份

简介

CentOs7上实现mysql数据库主从备份,包括部署 mysql 环境等

一、准备好两台机子,一台主机 master,一台备机 slave

编辑 master 以及 slave 的 /etc/sysconfig/network-scripts/ifcfg-ens33 配置好各自的 IP 地址,如果是 克隆的,则 IP 也一样,会有问题,所以需要配置好 IP
  master IP: 192.168.75.20
  slave IP: 192.168.75.21
1.在 ifcfg-ens33 最后追加两行,指定 IP 地址以及 子网掩码(示例为主机)

IPADDR=192.168.75.20
NETMASK=255.255.255.0

2.重启网络服务

service network restart

3.查看 ip 地址是否配置成功

ip a

 在 ens33 里,inet 显示配置的 IP 地址
4.相互 ping 一下,通了才行
5.主备机关闭防火墙

systemctl disable firewalld    # 开机不启动防火墙
systemctl stop firewalld    # 关闭防火墙

二、分别在主备机子上部署 mysql 环境

CentOS7 里没有 Mysql,而是 MariaDB,是 Mysql 的分支,但是咱也可以用 Mysql
1./opt 下创建 /mysql57 目录,下载 mysql,在搜狐镜像上 http://mirrors.sohu.com/

wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar

2.解压 tar 包

tar xf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar

3.安装 mysql

ll|grep .rpm
	-rw-r--r--  1 root root  531056640 Jun 12  2019 mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
    -rw-r--r--  1 7155 31415  25365436 Jun 12  2019 mysql-community-client-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415    281248 Jun 12  2019 mysql-community-common-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415   3833396 Jun 12  2019 mysql-community-devel-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415  47074656 Jun 12  2019 mysql-community-embedded-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415  24079736 Jun 12  2019 mysql-community-embedded-compat-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415 129991352 Jun 12  2019 mysql-community-embedded-devel-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415   2272032 Jun 12  2019 mysql-community-libs-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415   2116432 Jun 12  2019 mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415 173500088 Jun 12  2019 mysql-community-server-5.7.27-1.el7.x86_64.rpm
    -rw-r--r--  1 7155 31415 122530756 Jun 12  2019 mysql-community-test-5.7.27-1.el7.x86_64.rpm
yum install -y *.rpm    # 安装所有 .rmp

 图形界面默认安装位置:/var/lib/mysql
 非图形界面默认安装位置:/usr/share/mysql
4.新建 /mydata/mysql 目录

mkdir -p /mydata/mysql

5.给 mysql 读写权限(mysql 用户)

chown mysql -R /mydata/mysql

6.修改配置文件,路径位置 /etc/my.cnf

vim /etc/my.cnf

原配置文件:

  [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # Settings user and group are ignored when systemd is used.
    # If you need to run mysqld under a different user or group,
    # customize your systemd unit file for mariadb according to the
    # instructions in http://fedoraproject.org/wiki/Systemd

    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid

    #
    # include all files from the config directory
    #
    !includedir /etc/my.cnf.d

将头两行修改成:

    datadir=/mydata/mysql
    socket=/mydata/mysql/mysql.sock

[mysqld_safe] 修改成:

    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

新增:

    [mysql]
    socket=/mydata/mysql/mysql.sock

7.关闭 selinux

setenforce 0

8.启动 mysql

systemctl start mysqld

9.查看 mysql 状态

service  mysqld  status

看到状态为 active(running),说明安装成功并成功运行了
注意,这里是 mysqld 而不是 mysql,否则会有错误提示 Unit mysql.service could not be found.
并不是 CentOS7 嫌弃 mysql,要按照 MariaDB,而是自己敲错了命令

三、初始化 mysql 原始密码

1.root 用户登录 mysql,输入密码直接回车即可

mysql -uroot -p

2.查看 mysql 日志,匹配 “pass”

cat /var/log/mysqld.log|grep pass

root@loaclhost 后面跟着的就是临时生成的密码
3.初始化密码

mysql_secure_installation

设置好密码后,y,让输密码再输一次,然后一路 y 就好

如果上面操作有误,一直显示不出临时密码,还可以这样修改,该方法同样适用于忘记密码的情况
1.修改 配置文件

vim /etc/my.cnf

[mysqld] 增加下面代码,跳过密码验证

skip-grant-tables

2.保存并退出后,重启 mysql 服务

service mysqld stop
service mysqld start

3.直接登录 mysql

mysql -uroot

4.切换到 mysql 数据库

use mysql

刷新权限,这一步一定要做!!!否则会陷入一个死循环

flush privileges;

重设密码,要看到 Query OK… 才行

set password for root@localhost = 'your_password';

退出 mysql,还原 配置文件(把 skip-grant-tables删掉),重启 mysql 服务

service mysql restart

再次登录 mysql,使用刚刚设置的密码登录

mysql -uroot -p

5.为了后续方便,修改 mysql 密码校验
密码校验策略分为 3 个等级:
0 –> 校验级别最低,只校验密码长度,长度可以设置(默认)
1 –> 密码必须包括大小写字母、数字、特殊字符
2 –> 满足以上两条的同时,对于密码中任意连续的 4 个(或以上)不能是字典中的单词

set global validate_password_policy=0;    # 修改密码校验等级为 0
set global validate_password_length=3;    # 设置密码长度最短为 3

四、master 上的操作

master IP: 192.168.75.20
1.编辑配置文件

vim /etc/my.cnf

在 [mysqld] 中增加以下配置

server-id=1                         # 设置 id,这个可以是任意数字
log-bin=/mydata/log/master-bin      # 启动 binlog 日志,名字必须是 log-bin
sync_binlog=1                       # 确保主从复制的事务安全

2.配置好后,新建相应目录,授权,重启 mysqld 服务

mkdir -p /mydata/log
chown mysql -R /mydata/
systemctl restart mysqld

3.重启 mysqld 后查看 /mydata/log 下是否生成文件,有文件则配置 OK
4.root 登录 mysql,新建 slave 用户,并给 slave 用户授权并刷新

grant replication slave on *.* to 'slave'@'192.168.75.21' identified by '6yhn^YHN';
flush privileges;

5.查看用户是否增加成功

show grants for slave@192.168.75.21;
        +-----------------------------------------------------------+
        | Grants for slave@192.168.75.21                            |
        +-----------------------------------------------------------+
        | GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.75.21' |
        +-----------------------------------------------------------+
        1 row in set (0.00 sec)

6.查看有关从属服务器线程的关键参数的信息,注意,\G 不用加 ;

	show master status\G
    *************************** 1. row ***************************
                 File: master-bin.000002
             Position: 602
         Binlog_Do_DB:
     Binlog_Ignore_DB:
    Executed_Gtid_Set:
    1 row in set (0.00 sec)

五、slave 上的操作

slave IP: 192.168.75.21
1.编辑配置文件

vim /etc/my.cnf

在 [mysqld] 中增加以下配置

server-id=2                          # 这个 id 随便给,但不要和 master 的一样
relay-log=/mydata/log/slave-relay    # 这里是 relay-log 了,名字必须是 relay-log,备份的名字也就 slave-relay
sync_binlog=1
read-only=ON                         # 开启只读模式,确保主备数据一致

2.创建文件夹,并授权,重启 mysql 服务,重启后 /mydata/log 下暂时没有文件

mkdir /mydata/log
chown -R mysql /mydata/
systemctl restart mysqld

3.进入数据库,准备建立连接
[准备建立连接的命令解释]

CHANGE MASTER TO
  MASTER_HOST='192.168.75.20',    # master IP
  MASTER_USER='slave',    # master 上创建专门用于备份的用户
  MASTER_PASSWORD='6yhn^YHN',    # 及其密码
  MASTER_PORT=3306,    # 从这行开始,都可以不输入,只要上面几行即可开启备份(而且最好不要设置,要不然会挖坑)
  MASTER_LOG_FILE='master-bin.000002',    # master 上 mysql 执行 show master status \G 查到的 File
  MASTER_LOG_POS=602,    # master 上 mysql 执行 show master status \G 查到的 Position
  MASTER_CONNECT_RETRY=10;    # 设置超时时间,超过 n 秒没连接上,则表示 master 挂了

[以下用于复制,执行命令]

CHANGE MASTER TO
  MASTER_HOST='192.168.75.20',
  MASTER_USER='slave',
  MASTER_PASSWORD='6yhn^YHN';

4.开启 slave 连接,主备机连接成功,数据开始同步!!!

start slave;

5.查看有关从属服务器线程的关键参数的信息

	show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.75.20
                      Master_User: slave
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: master-bin.000002
              Read_Master_Log_Pos: 602
                   Relay_Log_File: slave-relay.000003
                    Relay_Log_Pos: 817
            Relay_Master_Log_File: master-bin.000002
                 Slave_IO_Running: Yes                                  # 这里两个 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: 602
                  Relay_Log_Space: 1235
                  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_UUID: d94faa39-e098-11ea-9c51-000c29823fb8
                 Master_Info_File: /mydata/mysql/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
               Master_Retry_Count: 86400
                      Master_Bind:
          Last_IO_Error_Timestamp:
         Last_SQL_Error_Timestamp:
                   Master_SSL_Crl:
               Master_SSL_Crlpath:
               Retrieved_Gtid_Set:
                Executed_Gtid_Set:
                    Auto_Position: 0
             Replicate_Rewrite_DB:
                     Channel_Name:
               Master_TLS_Version:
    1 row in set (0.00 sec)

至此,大功告成!!!

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。