官网下载地址:
https://downloads.mysql.com/archives/community/
1、单机安装
安装依赖
yum -y install libaio
解压安装
tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql
cd /usr/local/mysql
创建一个mysql组和用户
groupadd mysql
useradd -r -g mysql mysql
更改mysql 目录所属的用户组、用户以及文件权限
#切换到刚刚下载的mysql文件夹对应的目录下
cd /usr/local
#更改文件的用户组和用户
chown -R mysql:mysql mysql
#给mysql目录下的所有文件加执行权限
chmod -R 775 mysql
把mysql/bin目录加入到系统环境变量中
#把这个写到配置文件里,路径不同,记得要修改路径
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
#生效配置文件
source /etc/profile
# 检查环境变量是否配置成功
mysql --version
如果出现版本号,则表示MySQL环境变量配置成功了。
生成临时密码,记住这个密码,后面要使用。
#切换到mysql目录下
cd /usr/local/mysql
# 生成临时数据库密码
mysqld --user=mysql --initialize --datadir=/usr/local/mysql/data
注意:这里的临时密码需要记住 w,bnuSs<t1tV
复制启动文件到/etc/init.d目录
# 在mysql目录下复制启动文件到/etc/init.d/目录
cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
配置my.cnf
vi /etc/my.cnf
[mysqld]
# 指定Mysql数据库的开放端口。
port = 3306
# 设置Mysql数据库的安装目录(绝对路径)。
basedir = /usr/local/mysql
# 设置Mysql数据库的数据存放的绝对路径(存放目录)。必须是data,或者是\\xxx-data(my.ini需要,my.cnf不需要)。
datadir = /usr/local/mysql/data
# 设置MySQL数据库的最大连接数量。
max_connections = 100
# 设置MySQL数据库的连接超时时间。默认设置是一个数据库连接超过8小时没有使用,达到了server端的timeout,服务器将断开这条连接。
wait_timeout = 28800
# 当没有数据库请求时,28800秒(即8小时)将自动断开连接。要同时设置interactive_timeout和wait_timeout才会生效。
interactive_timeout = 28800
#表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=1
#日志binlog文件保留天数,默认0永久保留
expire_logs_days=7
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[client]
socket=/var/lib/mysql/mysql.sock
!includedir /etc/my.cnf.d
保存后,给配置文件加上可执行权限
chmod -R 775 /etc/my.cnf
#日志目录
mkdir /var/log/mariadb/
touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/log/mariadb/
mkdir /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/
启动服务,启动之前我们先查询有没有启动过,没有启动查询结果为空
ps -ef|grep -v grep |grep mysql
ps -ef|grep -v grep |grep mysqld
启动
#启动mysql服务
/etc/init.d/mysqld start
#启动成功标志
Starting MySQL. SUCCESS!
登录并修改root密码
# mysql -u用户名 -p密码
mysql -uroot -p"w,bnuSs<t1tV"
登录mysql ,密码就是初始化时生成的临时密码;
登录进来之后,我们来修改密码
#修改密码为root
set password for root@localhost = password('root');
quit 退出后,重新登录一下
mysql -uroot -proot
开放远程登陆
#登录进来之后,切换到mysql库
use mysql;
#修改用户权限
update user set user.Host='%' where user.User='root';
#刷新权限
flush privileges;
开启防火墙
#开启端口
firewall-cmd --permanent --add-port=3306/tcp
#重新加载防火墙
firewall-cmd --reload
2、主从复制
按照上面的方式,安装两台单机版本。
二进制日志文件
修改数据节点的唯一标识
在 [mysqld] 下新增2行,其中server-id用来区分节点的编号,唯一。log-bin设置二进制文件的名称。
vi /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
另外一台
[mysqld]
server-id=2
log-bin=mysql-bin
重启数据库 让二进制文件生效即可
/etc/init.d/mysqld restart
重启后生成二进制文件
ll /usr/local/mysql/data/mysql-bin*
-rw-r----- 1 mysql mysql 154 3月 21 16:37 /usr/local/mysql/data/mysql-bin.000001
-rw-r----- 1 mysql mysql 19 3月 21 16:37 /usr/local/mysql/data/mysql-bin.index
实现主从挂载
主库状态
主库IP这里使用192.168.111.201
检查主库的状态,主要查询 要同步的 文件名 File 和 位置 Position
#在主库执行
# 在主库201查询状态
# 登录
mysql -uroot -proot
SHOW MASTER STATUS;
如下 Position 查询结果为 154 后面需要使用。
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
实现主从挂载
这一步在 从库 192.168.111.202 里面执行
# 在从库中执行
# 从库链接主库
# IP/端口/用户名/密码/二进制文件名/pos位置
# 登录
mysql -uroot -proot
#同步主库
CHANGE MASTER TO
MASTER_HOST="192.168.111.201",#主库ip
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=154;
启动主从
启动主从服务,在从库执行下面命令
# 登录
mysql -uroot -proot
#启动
START SLAVE;
这一步在 从库里面执行,出现如下2个yes就成功了。
# 登录
mysql -uroot -proot
#检查主从状态
#SHOW SLAVE STATUS;
#检查主从状态,命令行客户端,垂直格式显示结果
SHOW SLAVE STATUS\G
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
测试主从
主从要达到的效果,修改主库的数据,从库的数据跟着改变。千万不要手动去改从库的数据,去看主库变化没有,千万不要这样操作,这样主从就废了。
主从不一致故障
主从报错 Slave_SQL_Running: No
重新做主从,完全同步
该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
重新做主从,然后使用change master指定同步位置,这种耗时长
主库执行
mysql -uroot -proot
#1.先进入主库,进行锁表,防止数据写入
mysql> flush tables with read lock;
#注意:该处是锁定为只读状态
#2.进行数据备份,test表示要备份的数据库名称
mysqldump -uroot -proot --lock-all-tables --flush-logs test > /usr/local/mysql/data/back.sql
# 修改导出的sql语句
vi /usr/local/mysql/data/back.sql
# 创建数据库,test改成自己的数据库名称
CREATE DATABASE IF NOT EXISTS `test` CHARSET utf8;
# 在执行SQL语句之前,使用USE 数据库名;test改成自己的数据库名称
use `test`;
# 复制到从库
scp /usr/local/mysql/data/back.sql root@192.168.111.202:/usr/local/mysql/data/
mysql> unlock tables;
#查看主机状态:File和Position对应的值
show master status;
从库执行
# 从库操作
mysql -uroot -proot
# 1.停止从库的状态
mysql> stop slave;
# 2.清除从节点配置信息(仅清理master.info 和 relay-log.info 文件)
mysql> reset slave;
# 3.从库执行mysql命令,导入数据备份
mysql> source /usr/local/mysql/data/back.sql
# 4.设置从库同步,master_log_pos改成主库Position最新的值
CHANGE MASTER TO
MASTER_HOST="192.168.111.201",#主库ip
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=154;
# 5.启动同步
start slave ;
# 查看
SHOW SLAVE STATUS\G
mysql-bin文件过多,导致存储满
#查询保留天数
show variables like 'expire_logs_days';
#设置保留天数
set global expire_logs_days=2;
#立即清除
flush logs;