mysql安装以及主从配置,备份,安装常见问题

1.使用前准备

版本使用的是:mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
可以去国内镜像源下载速度比较快

centos集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以一定需要先卸载掉mariadb

  • 列出所有被安装的rpm package

rpm -qa | grep mariadb

  • 卸载

rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

  • 查看有无安装mysql

rpm -qa | grep mysql

  • 卸载流程

ps aux|grep mysql

find / -name mysql

rm -rf xxxxxxxxxxxx

  • 首先解压

tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz -C /usr/local

  • 修改名称

mv mysql-5.7.29-linux-glibc2.12-x86_64 mysql

  • 配置设置开机自启动

cd mysql/support-files/
cp mysql.server /etc/init.d/mysql

  • 修改/etc/init.d/mysql参数

vim /etc/init.d/mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

图片.png
  • 建立一个mysql的组:

groupadd mysql

  • 建立mysql用户,并且把用户放到mysql组:

useradd -r -g mysql mysql

  • 给mysql用户设置一个密码:

passwd mysql

  • 更改目录/usr/local/mysql 拥有者:

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

2.数据库初始化

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

  • 如果出现这个错误 提示缺少一些库


    图片.png
  • 执行

yum install -y libaio 或者 yum -y install numact 然后再执行安装操作

记录一下初始密码
  • 数据库加密

./mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

  • 数据库启动

./mysqld_safe --user=mysql &

  • 检查状态

ps -ef|grep mysql

3. 数据库操作

  • 登录 首次登陆密码为上面初始化密码

./mysql -uroot -p

  • 修改密码
    set password=password('新密码');

  • 远程访问

grant all privileges on *.* to root@'%' identified by 'root';
flush privileges;

4.访问操作

  • 开放本地防火墙端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
关闭防火墙也可以

5.后续配置


开机自启

  • 添加服务

chkconfig --add mysql

  • 开启自启

chkconfig mysql on


配置环境变量(可选操作)

vim /etc/profile

添加:

MYSQL_HOME=/usr/local/mysql
export MYSQL_HOME

图片.png
  • 配置生效

source /etc/profile

  • 或者不配置环境变量,配置一个软连接(推荐!!!!!)

ln -s /usr/local/mysql/bin/mysql /usr/bin

下次可以直接使用mysql指令了

完成安装

5.主从配置

1.配置my.cnf文件

server_id主从id必须不一致

vim /etc/my.cnf

[clinet]
port = 3306
default-character-set=utf8
[mysqld]
port = 3306
server-id=64
explicit_defaults_for_timestamp=true
character-set-server=utf8
basedir= /usr/local/mysql
datadir= /usr/local/mysql/data
default-storage-engine=INNODB
log-bin=mysql-bin

2.在主库中配置

创建一个用户给从数据库并且给予权限,其中ip,改为从库ip地址

create user slave;
grant replication slave on *.* to 'slave'@'127.0.0.1'identified by 'root123';
flush privileges;  

查询主库状态

show master status;
图片.png

记录下面的file 和position

3. 在从库中配置

填入上面记录的值,master_host填主机ip

change master to master_host='127.0.0.1',master_port=3306,master_user='slave',master_password='root123',master_log_file='master-bin.000002',master_log_pos=2505;

然后执行

start slave; 关闭是stop slave

查看 slave 的状态

show slave status \G
图片.png
图片.png

这两个都是yes表示启动成功了

4.如果没有成功,请在主库中

flush logs;
show master status;

记下File, Position。

图片.png

来到从库

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154;
stop slave;
start slave;
show slave status \G;
图片.png

可以看到已经成功完成主从配置

配置双主,只需要把从库当主库,主库当从库,按照以上思路再配置一遍即可

6.数据库备份

1. 全量备份

进入到自定义的脚本目录

/usr/local/mysql/sh
创建一个脚本

vim mysql_weekly.sh

编辑shell脚本



# 全备份路径

backDir=/usr/local/mysql/weekly


# 日志文件

logFile=/usr/local/mysql/weekly/weekly_all.log

 

# 获取当前时间,用于命名

nowDate=`date +%Y%m%d`

beginTime=`date +"%Y%m%d %H:%M:%S"`

 

# 进入备份文件夹

cd $backDir

dumpFile=$nowDate.sql

dumpFileTgz=$nowDate.sql.tgz

 

# mysqldump 导出所有数据库

echo dumping...

mysqldump -uroot -proot --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $dumpFile

echo compressing...

 

# 压缩文件

tar czvf $dumpFileTgz $dumpFile
# 是否删除sql文件
#rm $dumpFile

endTime=`date +"%Y%m%d %H:%M:%S"`

echo begin:$beginTime end:$endTime $dumpFileTgz success >> $logFile

2. 增量备份

首先查看增量备份有没有开启,参考下图


图片.png

创建脚本文件mysql_daily.sh


# 增量备份存放路径

backDir=/usr/local/mysql/daily

# binlog存放路径

binDir=/usr/local/mysql/data
# (上面开启binlog的路径,忘记了就通过mysql show variables like '%log_bin%'; 进行查询)

# binlog.index 文件路径

binIndex=/usr/local/mysql/data/mysql-bin.index
#(上面开启binlog的路径,忘记了就通过mysql show variables like '%log_bin%'; 进行查询)

# 日志文件

logFile=/usr/local/mysql/daily/bak-daily.log

# 将当前所有的日志写到磁盘,会新建一个00000*的binlog文件

mysqladmin -uroot -proot flush-logs

# 获取当前有几条binlog文件(需要保证是从1开始的)

count=`wc -l $binIndex | awk '{print $1}'`

nextNum=0

for file in `cat $binIndex`

do

# 获取文件名,去除文件夹名

base=`basename $file`

# 遍历每个binlog文件,如果是最新的不做操作,否则备份

nextNum=`expr $nextNum + 1`

if [ $nextNum -eq $count ]

then

echo $base skip! >> $logFile

else

dest=$backDir/$base

# file already exist

if(test -e $dest)

then

echo $base exist! >> $logFile



7. 定时任务

配置定时任务,去定时启动这2个脚本

输入如下命令,进入定时任务编辑界面:

crontab -e

添加如下命令(注意:linux的定时规则与spring的不同)

每天2点启动一次增量备份

0 2 * * * sh   /usr/local/mysql/sh/mysql_daily.sh

0 2 5 * * sh /usr/local/mysql/sh/mysql_weekly.sh

8. 常见问题

1.授权给其他用用户到数据库的权限报错的问题解决,尤其在配置其他访问数据库权限的时候

查看是否有授权权限

select host,user,grant_priv,Super_priv from mysql.user;

发现 没权限,改成 Y

update mysql.user set grant_priv='y' where host='localhost';
update mysql.user set grant_priv='y' where host='%';

刷新权限

flush privileges;

2.linux忘记mysql密码快速处理方法

首先需要我们关闭mysql

service stop mysql

然后执行

mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

现在可以直接登陆,不需要密码

mysql -u root

修改密码,我的版本是5.7

update user set authentication_string=password("test") where user='root';

刷新权限后成功

flush privileges;

你可能感兴趣的:(mysql安装以及主从配置,备份,安装常见问题)