#清除旧版本myqsllib包
yum remove mysql-libs -y
rpm -ivh *
#如果提示依赖错误,需要提前安装依赖包
如何报以下错误:
error:
Failed dependencies:
libnuma.so.1()(64bit) is needed by mysql-community-server-8.0.13-1.el7.x86_64 libnuma.so.1(libnuma_1.1)(64bit) is needed by mysql-community-server-8.0.13-1.el7.x86_64 libnuma.so.1(libnuma_1.2)(64bit) is needed by mysql-community-server-8.0.13-1.el7.x86_64
解决办法:
yum install numactl -y
出现问题:
error:
Failed dependencies:
pkgconfig(openssl) is needed by mysql-community-devel-8.0.13-1.el7.x86_64
解决办法:
yum install openssl-devel.x86_64 openssl.x86_64 -y
出现问题:
error:
Failed dependencies:
perl(Data::Dumper) is needed by mysql-community-test-8.0.13-1.el7.x86_64
解决办法:
yum -y install autoconf -y
出现问题:
error:
Failed dependencies:
perl(JSON) is needed by mysql-community-test-8.0.13-1.el7.x86_64
perl(Test::More) is needed by mysql-community-test-8.0.23-1.el7.x86_64
解决办法:
#yum install perl.x86_64 perl-devel.x86_64 -y
yum install perl-JSON.noarch -y
yum install perl-Test-Pod.noarch -y
#创建mysql数据目录
mkdir /data/mysql
chown -R mysql:mysql /data/mysql
#修改配置文件
vim /etc/my.cnf
port=3306
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
#设置不区分大小写,注意此项必须在初始化时操作,初始化完成之后,新增此配置无效
lower_case_table_names=1
#设置mysql默认编码为utf8mb4,也可不添加,mysql8.0默认编码就是utf8mb4
@default-character-set=utf8mb4
#开启binlog日志binlog日志存放目录,注意更改属主数组为mysql
log-bin=/data/mysqlbackup/binlog/mysql-bin
#binlog日志格式
binlog_format=mixed
#server的id,主从同步用,确定主节点
#server-id = 1
#binlog日志的有限时间,按秒计算
binlog_expire_logs_seconds = 604800
初始化操作
#初始化 可以跳过,建议跳过
#mysqld --initialize --console
systemctl start mysqld
#设置mysql开机自启动
systemctl enable mysqld
cat /var/log/mysqld.log
mysql -u root -p #+ 回车键
#输入临时密码(输入时不会显示出来,输入完直接回车)
alter USER 'root'@'localhost' IDENTIFIED BY '1qaz2wsx?Z';
查看所有用户是否可以远程连接,依次执行下列命令:
show databases;
use mysql;
select host, user, authentication_string, plugin from user;
#修改root用户host值,使root用户可以远程登录
update user set host = "%" where user='root';
flush privileges;
依旧出错的话,修改密码认证模式
alter USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz2wsx?Z';
flush privileges;
备注:
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。
解决问题方法有两种:
方法1.升级navicat驱动;
方法2.把mysql用户登录密码加密规则还原成mysql_native_password.。
此处使用的是方法2。
1.通过上述操作,已经开启mysql的binlog日志,注意mysql8.0默认是开启binlog日志的,默认存储在mysql的data目录下,如需更改请配置mysql的my.cnf文件
mysql查看binlog相关sql语句
show binary logs;
# 查看binlog现有详情
show variables like '%log%';
# 查看log变量的相关配置
set global expire_logs_days = 3;
# 设置binlog的保存时间,此为5.7版本
set global binlog_expire_logs_seconds = 604800 ;
# 设置binlog的保存时间为7天,按秒计算
show variables like 'binlog_format';
# 查看binlog的格式
show master status;
# 查看最新的binlog状态
show binlog events;
# 查看binlog日志文件的内容
show variables like 'max_binlog_size';
# 查看binlog日志文件的大小,默认为1GB
show binary logs;
# 查看目前存在的binlog日志
reset master;
# 重置所有的binlog,相当于删除所有的binlog,这个操作对主从集群影响非常大,因为主从赋值是基于binlog日志来实现的
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
# 删除指定的日志或日期之前的日志索引中的所有二进制日志。MASTER和BINARY是同义词
PURGE MASTER LOGS TO 'binlog.000013';
#清除binlog.000013日志
PURGE MASTER LOGS BEFORE '2020-01-08 10:00:00';
#清除2020-01-08 10:00:00前binlog日志
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
# 清除3天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。
为了应对数据库出现数据丢失问题,数据库的备份是一项不可或缺的事项,以下是mysql的备份策略
1)增量备份在周一到周六凌晨3点,会复制mysql-bin.00000到指定目录;
2)全量备份则使用mysqldump将数据库导出,每周日凌晨3点执行,并会删除上周留下的mysq-bin.00000,然后对mysql的备份操作会保留在mysql_backup.log文件中;
1.编写mysql全量脚本:Mysql-FullyBak.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#数据库用户名
dbuser='root'
#数据库用密码
dbpasswd='1qaz2wsx?Z'
#需要备份的数据库,多个数据库用空格分开
dbname='contain_rebellion'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/data/mysql_backup'
#数据备份路径
datapath='/data/mysql_backup/data'
#日志记录头部
echo "备份时间为${backtime},备份数据库表 ${dbname} 开始" >> ${logpath}/mysql_backup.log
#正式备份数据库
for db in $dbname; do
source=`mysqldump --flush-logs -u ${dbuser} -p${dbpasswd} ${db}> ${datapath}/${dbname}-${backtime}.sql` 2>> ${logpath}/mysql_backup.log;
#备份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#为节约硬盘空间,将数据库压缩
#tar jcf ${table}${backtime}.tar.bz2 ${backtime}.sql > /dev/null
#删除原始文件,只留压缩后文件
#rm -f ${datapath}/${backtime}.sql
#删除七天前备份,也就是只保存7天内的备份
find $datapath -name "*.sql" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo "数据库 ${db} 备份成功!!" >> ${logpath}/mysql_backup.log
else
#备份失败则进行以下操作
echo "数据库 ${db} 备份失败!!" >> ${logpath}/mysql_backup.log
fi
done
2.编写增量备份脚本:Mysql-DailyBak.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#数据库用户名
dbuser='root'
#数据库用密码
dbpasswd='1qaz2wsx?Z'
#需要备份的数据库,多个数据库用空格分开
dbname='contain_rebellion'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/data/mysql_backup'
#数据备份路径
datapath='/data/mysql_backup/data'
#日志记录头部
echo "备份时间为${backtime},增量备份开始" >> ${logpath}/mysql_backup.log
#刷新数据库日志
mysqldadmin -u ${dbuser} -p${dbpasswd} flush-logs 2>> ${logpath}/mysql_backup.log
3.设置crontab任务,执行备份脚本。先执行的是增量备份脚本,然后执行的是全量备份脚本
[root@test-huanqiu ~]# crontab -e
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0 /bin/bash -x /root/Mysql-FullyBak.sh >/dev/null 2>&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6 /bin/bash -x /root/Mysql-DailyBak.sh >/dev/null 2>&1
如果数据量小的情况下,也可一天一做全量备份,具体crontab如下
#每日凌晨3:00执行完全备份脚本
0 3 * * * /bin/bash -x /root/Mysql-FullyBak.sh >/dev/null 2>&1