Linux环境下的MySQL安装和定时备份

MySQL 安装

1. mysql 安装包下载:

  • 下载地址:https://dev.mysql.com/downloads/mysql/,如下图1所示,选择自己下载的版本:mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
  • 或者:http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz(有时候访问404没有资源)
    图1

2.mysql安装

  • 检查服务器下是否安装过mysql
 rpm  -qa | grep  mysql
 # 如果查询由, 先进行卸载,然后再进行安装
 # 卸载
rpm -e  –nodeps mysql-5.0.77-4.el5_4.2  (nodeps表示强制删除)
  • 提前创建好目录
cd /opt
1.将下载好的mysql压缩包上传至目录下
    解压:tar xvJf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
    重命名:重命名:mv mysql-8.0.27-linux-glibc2.12-x86_64  mysql-8.0.27
    cd /opt/mysql8.0.27/mysql
    创建data文件夹:mkdir data
2.分别创建用户组以及用户和密码(如果提示已存在说明之前有创建过了) 
    groupadd mysql 
    useradd -g mysql mysql
3.授权刚刚新建的用户 
chown -R mysql.mysql /opt/mysql8.0.27/mysql
chmod 750 /opt/mysql8.0.27/mysql/data -R
4.配置环境,编辑/etc/profile文件
#最后增加一行 添 加 mysql环 境
export PATH=$PATH:/opt/mysql8.0.27/mysql/bin:/opt/mysql8.0.27/mysql/lib
  • 编辑mysql配置文件my.cnf
#创建编辑my.cnf文件 vim /etc/my.cnf
[mysql]
port=3306
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
port=3306
socket=/var/lib/mysql/mysql.sock
[mysqld]
# 主 服 务 器 唯 一 ID
server-id=1
port=3306
#设置不需要同步的数据库
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
# 设 置 binlog格 式
binlog_format=STATEMENT
default_authentication_plugin=mysql_native_password
general_log_file= /var/log/mysql/mysql.log
socket=/var/lib/mysql/mysql.sock
basedir=/opt/mysql8.0.27/mysql
datadir=/opt/mysql8.0.27/mysql/data
log-bin=/opt/mysql8.0.27/mysql/data/mysql-bin
innodb_data_home_dir=/opt/mysql8.0.27/mysql/data
innodb_log_group_home_dir=/opt/mysql8.0.27/mysql/data/
max_connections=1000

3. mysql初始化

  • 切换到mysql的bin目录下,进行mysql初始化,如图(2)所示
cd /opt/mysql8.0.27/mysql/bin
./mysqld --user=mysql --basedir=/opt/mysql8.0.27/mysql --datadir=/opt/mysql8.0.27/mysql/data --initialize

图2

  1. 图(2),图中红框显示的即为登录的初始密码
  2. 进入mysql服务命令的目录:cd /opt/mysql8.0.27/mysql/support-files
cp -a mysql.server /etc/init.d/mysql
#给相关文件赋予可执行权限
chown 777 /etc/my.cnf
chmod a+x /etc/init.d/mysql
#检查一下/var/lib/mysql是否存在,否则进行创建
mkdir /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql/

4.启动mysql服务

  • 启动
#启动命令
service mysql start  或者 systemctl start mysql
启动报错:mysql is neither service nor target!?
执行解决:systemctl unmask mysql.service
在启动:service mysql start
  • 如下图3所示:
    图3
    5.编辑mysql启动服务脚本, 切记脚本名称不能和原来的mysql名字一样,否则设置开机自启会报错,报错如下图:
    mysql/usr/lib/systemd/system/mysqld.service

[Unit]
Description=The MySQL server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/etc/init.d/mysql start
ExecStop=/etc/init.d/mysql stop
ExecReload=/etc/init.d/mysql reload
PrivateTmp=true

[Install]
WantedBy=multi-user.target
#启动 MySQL 服务
systemctl start mysql.service
#关闭 MySQL 服务
systemctl stop mysql.service
#重启 MySQL 服务
systemctl restart mysql.service
#重新载入 MySQL 服务
systemctl reload mysql.service
#强制重新载入 MySQL 服务
systemctl force-reload mysql.service
#查看当前 MySQL 服务状态
systemctl status mysql.service
#设置 MySQL 开机自启
systemctl enable mysql.service
#禁用 MySQL 开机自启
systemctl disable mysql.service
#查看 MySQL 是否开机自启
systemctl is-enabled mysql.service
#查看开机启动项
systemctl list-unit-files

6.登录MySQL

  • 登录
#如果密码复杂,有特殊符号困扰登不上去,vim /etc/my.cnf文件中,
在[mysqld]的段中加上一句:skip-grant-tables --跳过密码验证 
然后保存退出,重启MySQL服务 
然后输入mysql -uroot -p 敲两下回车,进入mysql
修改数据库密码,因为有可能是跳过密码验证登录进来的,直接修改密码会报错,如下图(4)所示:

图4

#所以要进行刷新:flush privileges;
#然后进行修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'wl123456';
#修改root用户可以外部连接
#查看user表
select user,authentication_string,host,Grant_priv from user;
#可见user用户对应的host是localhost,现将其修改掉,命令如下:
update user set host = '%' where user = 'root';
flush privileges;
#连接成功

备注:处理完成之后,记得把my.cnf 中添加的临时跳过密码验证的配置删除掉,自此,linux部署mysql完成,可通过命令 systemctl start/stop/restart/status/enable mysql 来操作mysql服务。

###### 登录mysql报错: mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file

参考文档:mysql登录失败

解决一、联网状态或者有yum源可以直接安装缺失的包文件:
`yum install libncurses* -y`  部分系统 : `zypper install libncurses* -y`
然后再次登录mysql:`mysql -u root -p`,成功。
MySql Host is blocked because of many connection errors 问题的解决方法:https://www.cnblogs.com/zwjphp/p/13777101.html
错误日志:
message from server: "Host '10.250.112.141' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
原因:
  同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;
解决方法:
1、提高允许的max_connect_errors数量(这种方法不彻底,后期还可能导致异常出现):
  进入Mysql数据库查看max_connect_errors: show variables like 'max_connect_errors';
    修改max_connect_errors的数量为1000set global max_connect_errors = 1000;
    查看是否修改成功:show variables like 'max_connect_errors';
2、使用mysqladmin flush-hosts 命令清理一下hosts文件
  (1)如果是安装在Linux主机上的,可以通过whereis mysqladmin查找mysqladmin的路径
  使用命令修改:
           /usr/bin/mysqladmin flush-hosts -h 10.1.50.115 -uroot -p
  备注:
   配置有master/slave主从数据库的要把主库和从库都修改一遍

 (2)如果是在数据库连接软件上也可以在命令列工具里修改,命令如下:flush hosts;
        mysql> flush hosts;

重新启动程序,查看数据库连接是否正常就好啦。

MySQL 定时备份

  • 创建需要的文件目录
cd /opt/mysqlBak
#创建需要的文件存储目录
mkdir data  log  script
  • 创建备份脚本
cd /opt/mysqlBak/script

vim mysql.sh

#!/bin/bash

#保存备份个数,备份10天数据
backup_clean_day=10

#备份保存路径
backup_dir=/opt/mysqlBak/data
#备份日志路径
bakup_log=/opt/mysqlBak/log

#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#用户名
username=root
#密码
password=123456
#如果文件夹不存在则创建
if [ ! -d $back_dir ];
then     
     mkdir -p $backup_dir;
fi
#将要备份的数据库
DATABASES=$(/opt/mysql-8.0.27/bin/mysql -u$username -p$password -e "show databases" | grep -Ev "Database|sys|performance_schema|mysql|brp_log|information_schema")

#循环数据库进行备份
for db in  $DATABASES
do
    echo
    echo ----------$backup_dir/${db}-${dd}.sql.gz BEGIN----------
    /opt/mysql8.0.27/mysql/bin/mysqldump -u $username -p$password --default-character-set=utf8mb4 --single-transaction --source-data=2 --flush-logs --hex-blob --triggers --routines --events --databases ${db} |  gzip > ${backup_dir}/${db}-${dd}.sql.gz

                #写创建备份日志
  echo "create $bakup_log/${db}-${dd}.dupm" >> $bakup_log/log.txt
  echo ----------$backup_dir/${db}-${dd}.sql.gz COMPLETE----------
        echo
done
echo "done"
#删除10天之前的备份
find ${backup_dir} -type f -mtime +${backup_clean_day} -delete
  • 给脚本赋予权限
#给脚本文件赋予执行权限
chmod a+x mysql.sh
#然后再该目录下就可以直接运行改文件
./mysql.sh
#如图(5)所示

图5

#查看备份数据
cd /opt/mysqlBak/data
ls
#如图(6)所示

图6

  • linux 环境下添加定时备份脚本
#打开定时任务配置文件
crontab -e
#添加mysql备份
#定时每天凌晨一点备份数据
0 1 * * * /opt/mysqlBak/script/mysql.sh
#恢复数据数据只需解压备份文件运行sql脚本或者在脚本中找出自己想要恢复的数据即可

有些linux系统,比如有的suse系统执行脚本中的登录命令:DATABASES= ( m y s q l − u (mysql -u (mysqluusername -p$password -e “show databases” | grep -Ev “Database|sys|performance_schema|mysql|brp_log|information_schema”),没有正常备份成功,经过排查系统日志: tail -f /var/spool/mail/root 发现,执行脚本的时候报错:/opt/dataBak/script/mysql.sh: line 24: mysql: command not found done,

解决方案:
  • 第一种:将登录改成全路径:DATABASES=$(/opt/mysql-8.0.27/bin/mysql -u$username -p$password -e "show databases" | grep -Ev "Database|sys|performance_schema|mysql|brp_log|information_schema")
  • 第二种:查找mysql安装目录,配置一下软连接:ln -s /opt/mysql-8.0.27/bin/mysql /usr/bin, 以及mysqldump也可以作品链接:ln -s /opt/mysql-8.0.27/bin/mysqldump /usr/bin

本地备份执行脚本可能报错的情况,如下图:
在这里插入图片描述ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
解决办法,找到 /tmp/mysql.sock , 命令: find / -name mysql.sock
找到之后从新创建软连接,如果之前有 /tmp/mysql.sock ,现将其删掉,rm -f /tmp/mysql.sock

ln -s /tmp/systemd-private-df23079248e0421ca13fc7fd1300e838-mysql.service-Hzx2br/tmp/mysql.sock /tmp/mysql.sock

然后再执行备份脚本成功。

同步 Linux环境下部署MySQL与MySQL定时备份 - Yourbestboy的文章 - 知乎 https://zhuanlan.zhihu.com/p/624440460

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值