第六周作业
1. 通过编译、二进制安装MySQL5.7
1)二进制安装
#新增mysql组和mysql用户
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 定义变量,接受mysql二进制包名
MYSQL_PAK='mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz'
# MYSQL二进制包没有后缀名
MYSQL_VER_NOPOSTFIX=`echo $MYSQL_PAK | sed -nr 's/^(.*[0-9]).*/\1/p'`
tar xf ${MYSQL_PAK} -C /usr/local
ln -s /usr/local/${MYSQL_VER_NOPOSTFIX} /usr/local/mysql
#为 /usr/local/mysql 文件夹及其下面的文件改变所属
chown -R mysql.mysql /usr/local/mysql/
#添加PATH变量
echo 'PATH=/usr/local/mysql/bin/:${PATH}' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
ln -s /usr/local/mysql/bin/* /usr/bin/
#为Mysql进行配置变量文件的编写
cat > /etc/my.cnf<<EOF
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
[ -d /data ] || mkdir /data
mysqld --initialize --user=mysql --datadir=/data/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
[ $? -ne 0 ] && { echo "数据库启动失败,退出!";exit; }
MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}'
/data/mysql/mysql.log`
mysqladmin -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD
&>/dev/null
echo 'database installed'
使用注意:
1)将二进制包和该程序处于同一目录下 2)提前执行 yum -y install libaio numactl-libs libncurses*
3. 导入hellodb.sql生成数据库
mysql 环境下
source /root/hellodb_innodb.sql;
(1) 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄
where 后面跟的条件 and可以并列条件 还有or
(2) 以ClassID为分组依据,显示每组的平均年龄
重点: group by
分组函数 avg() sum() max() min()
(3) 显示第2题中平均年龄大于30的分组及平均年龄
将一个查询结果作为表再进行查询
(4) 显示以L开头的名字的同学的信息
关注 like 模糊查询
L开头 L%
含有L %L%
L结尾 L%
4.数据库授权magedu用户,允许192.168.1.0/24网段可以连接mysql
create user magedu@'192.168.1.%' identified by '123456';
grant all privileges on *.* to magedu@'192.168.1.%';
5.主从复制及主主复制的实现
环境准备:
主节点 10.0.0.3
从节点 10.0.0.4
统一使用mysql8.0.26
大前提:
关闭selinux
关闭防火墙
时间同步
主节点
1、修改配置文件
vim /etc/my.cnf server-id一般使用IP的最后一位
[mysqld]
server-id=3 #or server_id=3
log-bin=/data/mysql/logbin/mysql-bin #二进制文件的保存路径和前缀,路径/data/mysql/logbin 前缀 后面的mysql-bin
2、创建二进制文件夹
mkdir -p /data/mysql/logbin
3、改变文件夹的所有者和所属组
chown -R mysql.mysql /data/*
4、重启mysql
systemctl restart mysqld
此时在二进制文件夹会生成二进制文件,类似 mysql-bin.000001
二进制日志格式一定改为ROW!!!!!!!!!!!!!!
set binlog_format=ROW
5、创建mysql账户
create user repluser@'10.0.0.%' identified with mysql_native_password by '123456';
grant replication slave on *.* to repluser@'10.0.0.%';
6、完全备份数据库
mysqldump -A -F --master-data=1 --single-transaction > /data/all.sql
7、将备份的sql脚本发送到从节点
scp /data/all.sql root@10.0.0.4:/data
从节点
1、配置文件
vim /etc/my.cnf
[mysqld] server-id=4 read-only #表示只读,意味着slave节点
2、准备将主数据库完整备份到从节点
1)改变all.sql里的change master
CHANGE MASTER TO MASTER_HOST='10.0.0.3', MASTER_USER='repluser', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=156;
3、关闭二进制日志
在此之前可以查看
select @@sql_log_bin;
mysql> set sql_log_bin=OFF;
4、导入数据库备份
mysql> source /data/all.sql
5、开启二进制
set sql_log_bin=ON;
6、开启从节点
start slave;
7、查看从节点复制状态,关注两个线程是否开启
show slave status\G;
8、对主节点做改动:例如创建一个数据库,看能否成功同步到从节点
主主复制
关闭防火墙
关闭selinux
时间同步
环境准备
一台机器 10.0.0.3
一台机器 10.0.0.4
数据库 mysql 8.0
10.0.0.3配置
1、更改配置文件
2、建立二进制文件夹 更改文件夹所属组 所有者
3、开启数据库
systemctl start mysqld
4、更改二进制文件格式
set binlog_format=ROW;
5、记录二进制文件
6、创建从账户并授权
create user repluser@'10.0.0.%' identified by '123456';
grant replication slave on *.* to repluser@'10.0.0.%';
10.0.0.4
1、配置文件
2、创建二进制文件夹,
3、重启数据库
4、修改master
CHANGE MASTER TO
MASTER_HOST='10.0.0.3',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1256;
5、开启slave
start slave
10.0.0.3配置从节点
1、将change-master改变
CHANGE MASTER TO
MASTER_HOST='10.0.0.4',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=705;
改为对方Ip ,账户一样,二进制日志
2、开启slave
6.xtrabackup实现全量+增量+binlog恢复库
7.MyCAT实现MySQL读写分离
环境准备:
mycat服务器: 10.0.0.5
主mysql: 10.0.0.3
从mysql: 10.0.0.4
大前提:
关闭selinux
关闭防火墙
时间同步
一、搭建mysql主从
前面已有演示这里省略
二、搭建mycat
1)、安装java
yum -y install java
2)解压mycat
tar xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
3)生成PATH
echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
. /etc/profile.d/mycat.sh
4)开启mycat
mycat start
5)查看日志确认是否启动
tail -f //apps/mycat/logs/wrapper.log
6)连接到mycat
mysql -uroot -p123456 -h10.0.0.5 -P8066
7)修改mycat的端口为3306,密码为mage
8)
vim /apps/mycat/conf/schema.xml
9)主从服务器加 账号
10.0.0.3 主服务器
create user root@'10.0.0.%' identified by '123456';
grant all on *.* to root@'10.0.0.%' ;
10.0.0.4 从服务器 主服务器的 用户创建操作会同步到从服务器
create user root@'10.0.0.%' identified by '123456';
grant all on *.* to root@'10.0.0.%' ;
10、10.0.0.3主mysql服务器导入数据库
10.0.0.4根据二进制日志,也会生成数据库
11)客户端连接Mycat
12)验证读写
读:
还可通过通用日志查看读写操作
set global general_log=1;
通用日志存放在
/var/lib/mysql/slave.log
通过tail -f /var/lib/mysql/slave.log
查看
客户端查询
从服务器10.0.0.4查看
看主节点是否发生读操作?
同样的
a:开启通用日志;查询主的通用日志
写: