第六周作业

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:开启通用日志;查询主的通用日志

 

写:

 

 

 

posted @ 2022-05-16 15:53  xiaobotianlin  阅读(26)  评论(0编辑  收藏  举报