首页 > 数据库 >rocky linux mysql8.4主从环境搭建以及数据库备份全过程

rocky linux mysql8.4主从环境搭建以及数据库备份全过程

时间:2024-09-14 13:56:20浏览次数:3  
标签:log linux mysql8.4 Source mysqld usr mysql local rocky

准备工作

切换到root账户

ubuntu系统 执行 sudo -i 切换到root 方便操作

查看系统是否支持glibc2.28

因为安装的版本比较新需要新版glic2.28

redhat、centos系列使用以下命令

strings /lib64/libc.so.6 | grep GLIBC_2.28

1

有输出版本号证明支持

debian、ubuntu系列使用以下命令

strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_2.28

1

若是不支持需要添加 GLIBC_2.28 查看这篇教程安装

移除旧版本

如果你安装过mysql 为了防止出现奇奇怪怪问题,我们把旧版本卸载删除相关包和残留文件

redhat、centos系列使用yum命令

# yum 查询已安装的 MySQL 相关包

rpm -qa | grep -i mysql

# 卸载 MySQL 相关包

yum remove mysql-*

# 卸载完再查询还有无相关包

rpm -qa | grep -i mysql

debian、ubuntu系列使用apt命令

# 卸载mysql相关

   apt-get remove --purge mysql-*

   # 清除残留

   apt-get autoremove

   apt-get autoclean

删除相关配置文件和安装目录

  rm -rf /etc/my.cnf

  rm -rf /var/lib/mysql

  rm -rf /etc/mysql

安装mysql依赖

安装mysql所需要的依赖

redhat、centos系列使用yum命令

yum install -y libaio

yum install -y ncurses-compat-libs

debian、ubuntu系列使用apt命令

apt-get install libaio1

下载MySQL

去官网下载页面 获取下载链接

注意查看系统架构 uname -m。如果你是arm架构选择arm版本的二进制包

wget命令下载安装包

# -P 指定下载目录

wget -P /soft https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz


开始安装mysql

创建运行mysql的用户和用户组

groupadd mysql

useradd -r -g mysql -s /bin/false mysql

解压安装包

解压到 /usr/local/

tar xvf mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local/

如果你的tar 命令不支持解压.xz格式 使用下面命令解压

tar -Jxf mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz

解压后目录名太长改成 mysql

mv /usr/local/mysql-8.4.0-linux-glibc2.28-x86_64 /usr/local/mysql

修改权限创建目录

依次执行下面命令

# 创建数据目录,根据自己需求调整

mkdir -p /disk/mysqldata

cd /usr/local/mysql

mkdir mysql-files

mkdir log

touch log/error.log

chmod 750 mysql-files

chown mysql:mysql -R /usr/local/mysql/

chown mysql:mysql /disk/mysqldata

初始化mysql

#--basedir 安装目录  --datadir数据存储目录 可以按需调整

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data


查看初始化日志 root账户的初始化密码输出在日志中


#初始化日志输出到 /usr/local/mysql/log/error.log 文件中

#查看该文件

cat /usr/local/mysql/log/error.log

设置配置文件

配置文件位于 /etc/my.cnf

创建配置文件

vim /etc/my.cnf  (master服务器配置文件)

文件中写入以下内容(配置文件根据自己需要调整)

注意看下边有主备mysql配置文件


启动mysql

初始化后已经自动注册了系统服务 使用 systemctl 命令管理


启动


systemctl start mysqld


如果启动报错使用 journalctl -u mysqld.service 命令查看日志


查看状态


systemctl status mysqld


active (running) 表示运行中



停止


systemctl stop mysqld


重启


systemctl restart mysqld


设置mysql开机自启


systemctl enable mysqld


若是不能执行 systemctl mysqld 相关命令,有的系统上mysql初始化完会自动创建单元服务配置文件,有的没有。 没有关系小问题。 没有自动创建我们就手动创建


创建单元服务配置文件


sudo sudo vi /etc/systemd/system/mysql.service  (注意rocky linux是/etc下面,其他可能是/lib/systemd,别踩坑)


填入以下内容

ini

[Unit]

Description=MySQL Community Server

After=network.target


[Service]

User=mysql

Group=mysql

ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf

LimitNOFILE = 5000


[Install]

WantedBy=multi-user.target

然后重新加载单元配置


sudo systemctl daemon-reload

sudo systemctl enable mysql

现在就可以执行 systemctl start mysqld 相关命令了

修改默认密码

/usr/local/mysql/bin/mysql_secure_installation

配置主从同步

修改配置文件/etc/my.cnf  (master)

[client]

# 指定默认字符集

default-character-set=utf8mb4

[mysqld_safe]

# 错误日志的存放位置。

log_error = /usr/local/mysql/data/error.log

# 存放服务器进程 ID 的文件

pid_file = /usr/local/mysql/data/mysqld.pid

[mysql]

socket = /tmp/mysql.sock

[mysqld]

# mysql 的运行用户 这里的用户一定要和初始化时的用户一致

user = mysql

# 指定 MySQL 服务监听的端口为 3306

port = 3306

# 指定 MySQL 的安装目录

basedir = /usr/local/mysql

# 指定数据文件的存储位置。

datadir = /usr/local/mysql/data

socket  = /tmp/mysql.sock

# 日志目录

log_error = /usr/local/mysql/log/error.log


innodb_file_per_table = 1 #每个表有自己的表空间

character_set_server=utf8mb4 #字符集

skip_name_resolve = 1 #禁用DNS主机名查找

max_connections = 500

max_connect_errors = 100 #某台host连接错误次数等于max_connect_errors(默认10) ,主机'host_name'再次尝试时被屏蔽。

slow_query_log = 1 #是否开启慢查询日志收集

slow_query_log_file = /var/log/mysql/mysql-slow.log

log_queries_not_using_indexes = 1 #是否记录未使用索引的语句

log_slow_admin_statements = 1 #慢查询也记录那些慢的optimize table,analyze table和alter table语句

long_query_time = 10 #设置记录慢查询超时时间

validate_password_policy=0

innodb_large_prefix=on


skip_ssl #禁用ssl

log_bin_trust_function_creators=1 #用于在bin-log中记录创建的函数

#主从配置

server-id=1

log-bin=master-bin


expire_logs_days = 40

max_binlog_size = 1G


#配置不同步的库

binlog-ignore-db = mysql

binlog-ignore-db = sys

binlog-ignore-db = information_schema

binlog-ignore-db = performance_schem


vi /etc/my.cnf   (slave)

[client]

# 指定了客户端与服务器通信的套接字文件路径

socket = /tmp/mysql.sock

[mysqld_safe]

# 错误日志的存放位置。

log_error = /usr/local/mysql/log/mysql-error.log

# 存放服务器进程 ID 的文件

pid_file = /usr/local/mysql/data/mysqld.pid


[mysql]

socket = /tmp/mysql.sock

[mysqld]

# skip-grant-tables

socket = /tmp/mysql.sock


# mysql 的运行用户 这里的用户一定要和初始化时的用户一致

user = mysql

# 指定 MySQL 服务监听的端口为 3306

port = 3306

# 指定 MySQL 的安装目录

basedir = /usr/local/mysql

# 指定数据文件的存储位置。

datadir = /usr/local/mysql/data

# 日志目录

log_error = /usr/local/mysql/log/error.log

join_buffer_size = 128M

sort_buffer_size = 32M #是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存

read_rnd_buffer_size = 32M #随机读缓冲区大小,当按任意顺序读取行时(列如按照排序顺序)将分配一个随机读取缓冲区,进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度



innodb_file_per_table = 1 #每个表有自己的表空间

character_set_server=utf8mb4 #字符集

skip_name_resolve = 1 #禁用DNS主机名查找

replica_skip_errors = all

max_connections = 500

max_connect_errors = 100 #某台host连接错误次数等于max_connect_errors(默认10) ,主机'host_name'再次尝试时被屏蔽。

slow_query_log = 1 #是否开启慢查询日志收集

slow_query_log_file = /usr/local/mysql/log/mysql-slow.log

log_queries_not_using_indexes = 1 #是否记录未使用索引的语句

log_slow_admin_statements = 1 #慢查询也记录那些慢的optimize table,analyze table和alter table语句

long_query_time = 10 #设置记录慢查询超时时间

log_bin_trust_function_creators=1 #用于在bin-log中记录创建的函数

#主从配置

server-id=2

log-bin=binlog-bin

max_binlog_size = 1G

read_only=on


binlog-ignore-db = mysql

binlog-ignore-db = sys

binlog-ignore-db = information_schema

binlog-ignore-db = performance_schema


建立同步账号

mysql> create user rep@'1.1.1.1' identified  by 'yourpasswd';

Query OK, 0 rows affected (0.01 sec)


mysql> grant replication slave on *.* to rep@'1.1.1.2';

Query OK, 0 rows affected (0.00 sec)

mysql> show binary log status;

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

| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| binlog.000002 |      106 |              |                  |                   |

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

1 row in set (0.00 sec)

1 row in set (0.00 sec)

配置连接到主服务器的相关信息

change replication source to source_host='1.1.1.1', source_log_file='binlog.000002',source_log_pos=106,source_user='rep',source_password='yourpasswd',source_ssl=1;

start replica user='rep' password='yourpasswd';

mysql> show replica status\G

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

            Replica_IO_State: Waiting for source to send event

                 Source_Host: 1.1.1.1

                 Source_User: rep

                 Source_Port: 3306

               Connect_Retry: 60

             Source_Log_File: binlog.000002

         Read_Source_Log_Pos: 106

              Relay_Log_File: slave1-relay-bin.000002

               Relay_Log_Pos: 192

       Relay_Source_Log_File: binlog.000002

          Replica_IO_Running: Yes

         Replica_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_Source_Log_Pos: 106

             Relay_Log_Space: 706

             Until_Condition: None

              Until_Log_File:  

               Until_Log_Pos: 0

          Source_SSL_Allowed: Yes

          Source_SSL_CA_File:  

          Source_SSL_CA_Path:  

             Source_SSL_Cert:  

           Source_SSL_Cipher:  

              Source_SSL_Key:  

       Seconds_Behind_Source: 0

Source_SSL_Verify_Server_Cert: No

               Last_IO_Errno: 0

               Last_IO_Error:  

              Last_SQL_Errno: 0

              Last_SQL_Error:  

 Replicate_Ignore_Server_Ids:  

            Source_Server_Id: 1

                 Source_UUID: 8888

            Source_Info_File: mysql.slave_master_info

                   SQL_Delay: 0

         SQL_Remaining_Delay: NULL

   Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates

          Source_Retry_Count: 10

                 Source_Bind:  

     Last_IO_Error_Timestamp:  

    Last_SQL_Error_Timestamp:  

              Source_SSL_Crl:  

          Source_SSL_Crlpath:  

          Retrieved_Gtid_Set:  

           Executed_Gtid_Set:  

               Auto_Position: 0

        Replicate_Rewrite_DB:  

                Channel_Name:  

          Source_TLS_Version:  

      Source_public_key_path:  

       Get_Source_public_key: 0

           Network_Namespace:  

1 row in set (0.00 sec)之前版本的 MySQL 中已弃用的与 MySQL 复制相关的许多功能的语法现已删除,具体清单如下。


Removed Replacements

START SLAVE START REPLICA

STOP SLAVE        STOP REPLICA

SHOW SLAVE STATUS SHOW REPLICA STATUS

SHOW SLAVE HOSTS    SHOW REPLICAS

RESET SLAVE                         RESET REPLICA

CHANGE MASTER TO         CHANGE REPLICATION SOURCE TO

RESET MASTER                 RESET BINARY LOGS AND GTIDS

SHOW MASTER STATUS SHOW BINARY LOG STATUS

PURGE MASTER LOGS   PURGE BINARY LOGS

SHOW MASTER LOGS  SHOW BINARY LOGS



测试主从同步

在主上运行

create database test;

mysql> create table t1( name char(15) , homeadd char(20) , class char(7) );

Query OK, 0 rows affected (0.03 sec)


mysql> insert into t1 values("tom","beijing","2016");

Query OK, 1 row affected (0.01 sec)


mysql> insert into t1 values("lisi","baoding","2006"),("zhangsan","zjk","2006");

Query OK, 2 rows affected (0.00 sec)

Records: 2  Duplicates: 0  Warnings: 0


在从上查看表格的变化是否一致。


下面附上备份脚本实例

#!/bin/bash


# 数据库连接信息

USER="root"

PASSWORD="yourpasswd"

HOST="1.1.1.1"


# 需要备份的数据库列表

DATABASES=("data1" "data2" "data3")


# 备份存储路径

BACKUP_DIR="/home/backup"

DATE=$(date +"%Y%m%d")

BACKUP_FILE=$DATE.sql.gz

# FTP 服务器信息

FTP_HOST="192.1.13.1"

FTP_USER="ftpuser"

FTP_PASSWORD="ftppasswd"

FTP_DIR="/mysqlbackup"


# 创建备份目录(如果不存在)

mkdir -p "$BACKUP_DIR"/$DATE


# 循环备份每个数据库

for DB in "${DATABASES[@]}"; do

   BACKUP_FILE="rocky linux mysql8.4主从环境搭建以及数据库备份全过程_mysqlDATE/rocky linux mysql8.4主从环境搭建以及数据库备份全过程_慢查询_02DATE.sql.gz"   

#这里设置的是备份不锁表,快速备份,并备份触发器和存储过程,参数根据环境而定

   mysqldump -u "$USER" -p"$PASSWORD" -h "$HOST" --single-transaction --quick --triggers --routines --events "$DB" | gzip > $BACKUP_FILE

   

   if [ $? -eq 0 ]; then

       echo "Backup of database '$DB' completed successfully."

       

       # 上传备份文件到 FTP 服务器

       ftp -inv $FTP_HOST <<EOF

user $FTP_USER $FTP_PASSWORD

binary

prompt

cd $FTP_DIR

mkdir $DATE

cd $DATE

lcd "$BACKUP_DIR"/$DATE

put $DB-$DATE.sql.gz

bye

EOF


       if [ $? -eq 0 ]; then

           echo "Uploaded $BACKUP_FILE to FTP server successfully."

      #删除本地备份文件,这个根据需求而定

      rm -rf $BACKUP_FILE

       else

           echo "Error occurred while uploading $BACKUP_FILE to FTP server."

       fi

   else

       echo "Error occurred while backing up database '$DB'."

   fi

done

标签:log,linux,mysql8.4,Source,mysqld,usr,mysql,local,rocky
From: https://blog.51cto.com/dadloveu/12016273

相关文章

  • Linux内核开发环境-代码编译
    建议点击这里查看个人主页上的最新原文作者:陈孝松主页:chenxiaosong.com哔哩哔哩:陈孝松课程:chenxiaosong.com/courses博客:chenxiaosong.com/blog贡献:chenxiaosong.com/contributions邮箱:[email protected]交流群:544216206,点击查看群介绍点......
  • Linux基础入门 --10 DAY
    文本常见处理工具文件内容查看命令    cat    格式:cat[OPTION]...[FILE]...    常见选项:    -E:显示行结束符    -A:显示所有控制符    -n:对显示出的每一行进行编号    -b:对非空行进行编号    -s......
  • 必趣CB1核心板、H616主控linux验证IO模拟I2C驱动DS1307时钟芯片
    使用了#include<gpiod.h>内部库作为IO驱动`#ifndef __DS1307_Hdefine__DS1307_HdefineNUM_LEDS21//控制4个GPIO引脚defineCHIPNAME"gpiochip0"//GPIO芯片的名称defineWRITE_CMD 0x00defineREAD_CMD 0x01defineDEV_ADDR0xD0//......
  • Linux云计算 |【第三阶段】PROJECT1-DAY3
    主要内容:Keepalived高可用、部署Ceph分布式存储一、网站架构进阶项目案例案例1:Keepalived高可用延续PROJECT1-DAY2案例,部署两台代理服务器,实现如下效果:1)利用keepalived实现两台代理服务器的高可用(192.168.2.5/192.168.2.6)2)配置VIP为192.168.2.803)修改对应的域名解析......
  • Linux系统中重启服务器的方法!
    在Linux操作系统中,提供了多种方法用于重启服务器,那么Linux服务器如何重启?以下列举了常用的几种方法,希望对大家有所帮助,快来看看吧。重启Linux服务器有以下几种方法:1、使用命令行使用reboot命令reboot使用shutdown命令shutdown-rnow2、使用syste......
  • vsphere环境,扩容Linux标准磁盘及文件系统
    一、基础环境及目标概述1.查看基础环境[root@node3~]#df-ThFilesystemTypeSizeUsedAvailUse%Mountedondevtmpfsdevtmpfs3.8G03.8G0%/devtmpfstmpfs3.9G03.9G0%/dev/shmtmpfs......
  • Linux上文件的权限管理
    3.1文件/目录的权限3.1.1文件的权限每个文件都有其所有者(u:user)、所属组(g:group)和其他人(o:other)对它的操作权限,a:all则同时代表这3者。权限包括读(r:read)、写(w:write)、执行(x:execute)。在不同类型的文件上读、写、执行权限的体现有所不同,所以目录权限和普通文件权限......
  • 一个linux下监听某个端口并拉起任务的shell脚本
    ​  创建监控脚本:#!/bin/bash#定义要监控的端口号PORT=8011whiletrue;do#使用netstat或ss命令检查端口是否存在if!ss-tuln|grep-q":$PORT";thenecho"$(date)端口$PORT不存在,正在尝试重启服务...">>./port_monitor.l......
  • 一个linux下监听某个端口并拉起任务的shell脚本
    ​  创建监控脚本:#!/bin/bash#定义要监控的端口号PORT=8011whiletrue;do#使用netstat或ss命令检查端口是否存在if!ss-tuln|grep-q":$PORT";thenecho"$(date)端口$PORT不存在,正在尝试重启服务...">>./port_monitor.l......
  • Acunetix v24.8 - 29 Aug 2024 高级版漏洞扫描器(最新版) 附Windows/Linux下载链接
    前言AcunetixPremium是一种Web应用程序安全解决方案,用于管理多个网站、Web应用程序和API的安全。集成功能允许您自动化DevOps和问题管理基础架构。AcunetixPremium:全面的Web应用程序安全解决方案Web应用程序对于企业和组织与客户、合作伙伴和员工的联系至关......