mysql数据库集群搭建实验

数据库备份实验:

方式一:复制数据文件

$ cp -a /usr/local/mysql/data  备份目录

$ cp -a /var/lib/mysql  备份目录

方式二:二进制日志备份(log-bin):

 yum -y install mariadb-server mariadb              #安装数据库

 systemctl  start mariadb                        #启动数据库

vim /etc/my.cnf                                         #修改配置文件,产生二进制文件

 log-bin=mariadb-bin                      #新增一行开启二进制日志产生的文件

 systemctl  restart mariadb

 mysqlbinlog  mariadb-bin.000001               #查看二进制文件

 mysqlbinlog --start-datetime '2023-10-25 15:02:00'  --stop-datetime '2023-10-25 15:09:10' mariadb-bin.000001  | mysql -uroot -p123456

#将二进制文件导入数据库,数据库按时间范围根据日志文件里的命令恢复数据库。

 mysqlbinlog --start-position 106 --stop-position 185 mysql-bin.000001 | mysql -uroot -p

#根据数据大小进行恢复

 

方式三:mysqldump命令备份、mysql还原

#备份一个数据库

$ mysqldump -u用户名 -p密码 要备份的数据库名 > 文件名.sql

#备份一个数据库中的某张表

$ mysqldump -u用户名 -p密码 要备份的数据库名 表名 > 文件名.sql

#备份多个数据库

$ mysqldump -u用户名 -p密码 --databases 数据库名1 数据库名2 > 文件名.sql

#备份所有数据库

$ mysqldump -u用户名 -p密码 --all-databases > 文件名.sql

#还原,注意恢复备份的是一个数据库的时候需要手动创建数据库、再指定还原

$ mysql -u用户名 -p密码 要还原到的数据库名 < 文件名.sql

#还原多个数据库

$ mysql -u用户名 -p密码 < 文件名.sq

一、数据库主从实验

主服务器执行修改数据的命令,会把命令过程记录到bin-log日志文件,同时通知从服务器,从服务器使用已经接收了的主服务器授权记录登录主服务器,根据自己的日志在bin-log日志里按照上次的同步节点增量同步到本地中继日志中,这个过程使用的是i/o线程,下一个SQL线程执行新增的SQL语句,进行同步。

从服务器可以随时替换主服务器,从服务器可以分摊压力,可以充当数据备份

1、主从服务器都安装mariadb数据库

  •  yum -y install mariadb-server mariadb

2、打开主服务器的二进制日志文件

  •  vim /etc/my.cnf

 log-bin=mariadb-bin

 server-id=77                        #修改ID号

 systemctl start mariadb

3、打开从服务器的配置文件,修改ID

  •  vim /etc/my.cnf

 server-id=177

 systemctl  start mariadb

4、主服务器创建一个远程登录的授权账号,授予从服务身份

  •  grant replication slave on *.* to slave@'192.168.89.177' identified by '123456';

5、从服务器接受授权

 登录mysql数据库接受授权

  •  change master to master_user=‘slave’,master_host='192.168.89.77',master_port=3306,master_password='123456',master_log_file='mariadb-bin.000003',master_log_pos=399;

# master_log_file:二进制日志文件名

# master_log_pos:二进制日志文件大小

  •  退出数据库cd /var/lib/mysql/查看是否出现master.info文件

 #master.infof文件负责保存从服务器连接主服务器时使用的参数。

 再登录数据库里让主从数据库建立连接

  •  start   slave;                      #启动从进程
  •  show slave status\G;           #查看主从服务器是否同步成功

查看两个YES是否为yes,同步过来的文件为中继日志文件(relay_log_file)

  •  主数据库执行创建,修改,删除,插入等命令,回到从数据库查看变化,是否同步

二、主主实验(互为主从):

1、在主从实验的基础上继续以下操作的话要先关闭同步。

21为主,2为从配置一遍主从,在主配置文件中配置一下(开启二进制日志和其他内容)

3、在2上的配置文件做相同的配置,IP不同。

4、启动mariadb服务器,

5、1为主2为从:在主服务器(1)上授权

 grant replication slave on *.* to slave@'192.168.88.130' identified by '123456'

在从服务器(2)上保存授权信息

 change master to master_host='192.168.88.120',master_user='slave',master_port=3306,master_password='123456',master_log_file='mariadb-bin.000001',master_log_pos=399;

62为主1为从:

在主服务器(2)上授权

在从服务器(1)上保存授权信息

7、1和2都执行start slave(互为主从)

 start slave;                              #开启同步

 show slave status\G;              #查看同步是否开启

互相同步后分别有两套中继日志和log-bin日志

8、测试

create table hongfu(id int,name char(10),age int(3));

 insert into hongfu values(1,'zhangsan',18);

三、多主多从实验:

1、每台服务器都安装mariadb数据库,并修改配置文件,修改ID,两个主服务器开启log-bin 二进制日志文件。

 yum  -y install mariadb-server

 vim /etc/my.cnf

 log-bin=mariadb-bin

 server-id=12\13\14

 启动两个主服务器,systemctl start mariadb

2、主服务器1配置

  • 开启二进制日志,启动服务

  •  systemctl start mariadb
  • 给主服务器2授权

 grant replication slave on *.* to slave@'主服务器2IP' identified by '123456'

  • 在主服务器(2)上保存授权信息

 change master to master_host='192.168.88.120',master_user='slave',master_port='3306',master_password='123456',master_log_file='mariadb-bin.000001',master_log_pos='399';

3、在主服务器2上做相同的操作外,再加入一行log-slave-updates开启让中继日志同步到自己的bin-log日志的开关,使得主1执行的命名也能同步到主2的从服务器上。

  •  systemctl restart mariadb

  • 给主服务器1授权

grant replication slave on *.* to slave@'主服务器1IP' identified by '123456'

  • 给从服务器授权

grant replication slave on *.* to slave@'从服务器1IP' identified by '123456'

  • 在主服务器(1)上保存授权信息

 change master to master_host='192.168.88.130',master_user='slave',master_port='3306',master_password='123456',master_log_file='mariadb-bin.000001',master_log_pos='399';

查看二进制日志文件名和大小:show master status;

  • 在从服务器上保存授权信息

 change master to master_host='192.168.88.130',master_user='slave',master_port=3306,master_password='123456',master_log_file='mariadb-bin.000001',master_log_pos=399;

  • 同时在三台服务器上开启同步:start slave;
  • 查看同步开启状态:show slave status\G;

4、在主1上创建库,表,查看主2的从服务器是否同步。

四、多主一从实验;

主服务器配置

开启二进制日志,启动服务

授权

在主服务器2上做相同的操作

授权

从服务器操作

对主配置文件操作

#多主一从配置,请勿删除

[mysqld_multi]

mysqld=/usr/bin/mysqld_safe

mysqladmin=/usr/bin/mysqladmin

log=/tmp/multi.log

[mysqld11]

port=3307

datadir=/var/lib/mysqla/

pid-file=/var/lib/mysqla/mysqld.pid

socket=/var/lib/mysqla/mysql/sock

user=mysql

server-id=13

[mysqld12]

port=3308

datadir=/var/lib/mysqlb/

pid-file=/var/lib/mysqlb/mysqld.pid

socket=/var/lib/mysqlb/mysql/sock

user=mysql

server-id=13

 

初始化数据库,生成目录mysqla,mysqlb

mysql_install_db --datadir=/var/lib/mysqla --user=mysql

mysql_install_db --datadir=/var/lib/mysqlb --user=mysql

设置mysqla,mysqlb目录及以下文件的属主为mysql(防止出现权限问题)

启动从服务器上的两个独立进程

 mysqld_multi --defaults-file=/etc/my.cnf start 11

 mysqld_multi --defaults-file=/etc/my.cnf start 12

登录并保存授权信息

测试

五、读写分离试验:

主从从 + 读写分离

规划:

7-1                测试机 - mysql客户端

7-2                中间件 - amoeba

7-3                mariadb - master

7-4                mariadb - slave 1

7-5                mariadb - slave 2

账号,授权        规划:

三台数据库 - 主从从 #授权关系和账号

主 授予 两个从服务器 replication slave 权限

主的授权账号:

slave@'192.168.88.140'                #给从服务器140使用的

slave@'192.168.88.150'                #给从服务器150使用的

账号:slave

三台数据库 给 amoeba服务器授权的账号和权限

grant all on hongfu.* to amoeba_user@'192.168.88.120' identified by '123456';

账号:amoeba_user

#授权时,可以独立授权,也可以使用主服务器授权,并同步给从服务器。

amoeba 服务器的 账号,密码,端口等信息

账号:amoeba_root

端口:8066(默认) -> 3306

读写分离

中间件:一种提供在不同技术、不同的软件之间共享资源的程序,更大化了利用了数据库的性能,可以无限扩展(注:真实环境中并非如此)

数据库的中间件:

                mysql proxy (官方版本) 性能低,需要lua脚本

                atlas 性能低,响应时间长

                amoeba 陈思儒研发的

一.先搭建一个主从关系的服务器

1、在主、从、从服务器上安装mysql mysql-server

2、主服务器开启二进制日志log-bin=mariadb-bin,所有mysql服务器都修改ID号

 server-id=服务器IP。

3、在主服务器上授权,从服务器上保存授权信息,并开启从服务线程。

主: grant replication slave on *.* to slave@'192.168.88.140' identified by '123456';

 grant replication slave on *.* to slave@'192.168.88.150' identified by '123456';

     show master status;

从: change master to master_host='主服务器IP',master_port=3306,master_user='slave',master_password='123456',master_log_file='mariadb-bin.000001',master_log_pos=553;

 start slave;

 show slave status\G;

4、主服务器给amoeba服务器授权,从服务器也会同步授权。

 grant all on hongfu.* to amoeba_user@'192.168.88.120' identified by '123456';

5、关闭从服务器线程,主服务器再修改或者创建,为了做读写分离时,服务器数据不一样,测试有明显的实验效果(实际生产环境中不能停掉。。)(先关闭从1,增加主服务器数据,再关从2,主服务器再增加数据。)

二、配置读写分离

1、安装gcc环境(amoeba需要源码安装)

2、拷贝第三方软件,创建单独的目录

 unzip amoeba-n.zip

 cd amoeba-n

 tar -xf jkd-7

 cp -r jdk1.7.0_40  /usr/local/jdk

 mkdir /usr/local/amoeba

 unzip amoeba-mysql        -d      /usr/local/amoeba/

3、声明用java写出来的程序如何调用(/etc/profile),写入环境变量。

长度

4、安装amoeba

将/usr/local/amoeba/conf/amoeba.xml导入到Windows,使用nodpid的工具查看,修改文件类型为unix,"gdk"修改为utf-8,然后再工具栏点击编码,转为UTF-8编码,ctrl+s保存文件,再导回Linux,就不会乱码了。

5、配置amoeba这个软件

<server>.....</server>区域

前面的两个大标签都是关于amoeba如何运行的配置。

 

<dbServerList>......</dbServerList>区域(数据库列表)

有几台需要连接的数据库,就写几个server标签。

由于只提供了一个服务器模板,需要自己复制另外两个填写关于读的信息

复制两份模版,修改

 修改虚拟服务器组的配置

loadblance后面>1<代表轮询,>2<代表权重;

poolnames后面标识那些服务器为一个组,server2,server3代表服务器2,3为一个组

WPool为写的虚拟服务器组,RPool为读的虚拟服务器组。

 语句路由标签:

前三个标签都是辅助amoeba解析SQL语句的相关规则,让amoeba理解用户的调度是读还是写,defaultpool必须指主服务器,指主服务器的组或者主服务器名server1或WPool,writePool指向写的组,readPool指向读的组。

 cd /usr/local/amoeba/bin

 chmod +x *

 ln -s /usr/local/amoeba/bin/* /usr/local/bin/

启动amoeba,修改一下启动脚本:/usr/local/amoeba/bin/amoeba

注意:将-Xss128k 修改为 -Xss256m

7#在主和从服务器上进行指定用户授权,授权目的为了让amoeba能连接到主从服务器进行查询。

 在用amoeba连接主从数据库前,先用amoeba的服务器安装mariadb远程连接,是否能连接上,阶段测试。

 mkdir /usr/local/amoeba/logs

 cd /usr/local/amoeba/logs

nohup bash -x /usr/local/amoeba/bin/amoeba &

把这个放到后台 退出终端也可以继续运行

注:如果报错,查看logs中的nohup.out文件,查看error等报错关键词。

ps aux | grep amoeba        

查看一下运行的程序 查看到的话就说明程序已经运行了起来

8、客户端测试(安装一个MySQL软件包才可以连接)

客户端连接amoeba服务器

 mysql -h192.168.88.120  -P8066 -uamoeba_root -p123456

 登录后写入的数据是在主服务器上写入,读的是两个从服务器上的数据,且是轮询读取。

 关闭amoeba用kill命令结束进程。

在主、从服务器上创建表a1,在主服务器的表中插入数据

之后在客户端登录测试::::

读取池的效果:

8客户端安装apache服务

yum -y install gcc lrzsz httpd openssl-devel libcurl-devel perl-DBI pcre-devel libxml2 libxml2-devel mysql-devel php php-bcmath php-gd php-xml php-mbstring php-mysql php-pear php-xmlrpc net-tools

2、将Discz压缩包解压

 unzip Discuz

 cp -r upload/*  /var/www/html

 chown  -R apache.apache /var/www/html/

登录两个从服务器开启同步,start slave;

 kill  amoeba进程号

 vim /usr/local/amoeba/conf/amoeba.xml

 8066改为3306

 rm -rf nohup.out

 ! nohup

 Windows浏览器安装项目

模拟主服务器故障,用从服务器进行替换主服务器。

1、关闭主服务器的mariadb,模拟故障

 systemctl stop mariadb

2、关闭apache服务器

 systemctl stop httpd

3、停止从服务器的同步

 stop slave;

4、打开要替换主服务器的从服务器的log-bin日志

 vim /etc/my.cnf

 log-bin=mariadb-bin

 systemctl restart mariadb

5、登录从服务器数据库,给其他从服务器授权。

 grant replication slave on *.* to slave@'%' identified by '123456'

 show master status;

6、从服务器接受授权

 change master to master_host='主服务器IP',master_port=3306,master_user='slave',master_password='123456',master_log_file='mariadbin.000001',master_log_pos=553;

 start slave;

 show slave status\G;

7、登录amoeba服务器,修改配置文件,注释掉server1,虚拟读写组里面将server1改为server2,

 vim  /usr/local/amoeba/conf/amoeba.xml

8、重启amoeba服务

 kill 进程号

 rm -rf /usr/local/amoeba/logs/nohup.out

 nohup  bash -x /usr/local/amoeba/bin/amoeba &

9、启动apache服务

10、浏览器访问网页项目,进行测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值