MySQL集群

1. MySQL主从备份

  1. 实验准备
    mysql主从服务器是通过二进制日志来实现备份;当主服务器上有更改数据库的操作时,会写入主服务器二进制日志中,通过主从将二进制日志传递给从服务器,从服务器通过二进制日志实现实时同步;
    注意 : MySQL主从无法避免误操作
    环境 : 两台版本一致的MySQL服务器;
  2. 在主从服务器上安装mariadb-server和mariadb,开启二进制日志
    ``` 主服务上的配置 [root@master ~]# yum install -y mariadb mariadb-server [root@master ~]# vim /etc/my.cnf log-bin=mysql-bin server-id=11 [root@master ~]# systemctl restart mariadb

从服务上的配置 [root@salve ~]# yum install -y mariadb mariadb-server [root@master ~]# vim /etc/my.cnf log-bin=mysql-bin server-id=12 [root@master ~]# systemctl restart mariadb

  1. 3. 在主服务器上授权,从服务器保存授权信息

[root@master ~]# mysql -uroot

MariaDB [(none)]> grant replication slave on . to slave@’192.168.10.12’ identified by ‘123456’;

  1. #每一个从服务器都需要一个账户来同步;授权slave用户在192.168.10.12主机上进行同步

MariaDB [(none)]> show master status; #获取master二进制日志信息 +—————————+—————+———————+—————————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +—————————+—————+———————+—————————+ | mysql-bin.000003 | 398 | | | +—————————+—————+———————+—————————+

  1. 4. slave上配置同步参数

[root@slave ~]# mysql -uroot

MariaDB [(none)]> change master to -> master_user=’slave’, #用来在master上同步的用户名 -> master_password=’123456’, #用来在master上同步的用户名的密码 -> master_host=’192.168.10.11’, #master的ip -> master_log_file=’/var/lib/mysql/mysql-bin.000003’, #同步哪一个日志文件 -> master_log_pos=398; #日志文件的位置信息

MariaDB [(none)]> start slave; #启动slave

MariaDB [(none)]> show slave status \G; 查看从服务器状态 Slave_IO_Running: YES
Slave_SQL_Running: Yes

这两个都是yes表示搭建成功

  1. 5. 验证

master上创建一个abc库 [root@master ~]# mysql -uroot MariaDB [(none)]> create database abc;

从服务器上查看 [root@slave mysql]# mysql -uroot MariaDB [(none)]> show databases; +——————————+ | Database | +——————————+ | information_schema | | abc | | mysql | | performance_schema | | test | +——————————+

  1. <a name="7d0a60f4"></a>
  2. ### 2. Mysql主主备份
  3. 1. 实验准备<br />在连个服务器上都做主从备份;在上面的主从备份上,将二者角色互换,再做一次主从;
  4. 2. 修改主配置文件my.cnf(两个服务器都要如下修改)

在主备的环境下 [root@slave mysql]# vim /etc/my.cnf log-bin=mysql-bin
server-id=12 replicate-do-db=test #备份的数据库 binlog-ignore-db=mysql #不复制的数据库 binlog-ignore-db=information_schema
auto-increment-increment=2 #自动增长的增长量改为2 auto-increment-offset=1 #自动增长字段的初始值为1

[root@slave mysql] systemctl restart mariadb

  1. 3. 在主服务器上授权,在从服务器上配置同步参数

主服务器 MariaDB [(none)]> grant replication slave on . to slave@’192.168.10.11’ identified by ‘123456’; MariaDB [(none)]> show master status; +—————————+—————+———————+—————————————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +—————————+—————+———————+—————————————+ | mysql-bin.000005 | 483 | | mysql,information_schema | +—————————+—————+———————+—————————————+

从服务器 MariaDB [(none)]> change master to master_user=’slave’, -> master_password=’123456’, -> master_host=’192.168.10.12’, -> master_log_file=’mysql-bin.000005’, -> master_log_pos=483;

MariaDB [(none)]> start slave;

  1. 4. 验证

在192.168.10.11上创建数据库 MariaDB [(none)]> create database aaaa;

在192.168.10.12上查看,并删除 MariaDB [(none)]> show databases; +——————————+ | Database | +——————————+ | information_schema | | aaaa | | mysql | | performance_schema | | test | +——————————+

MariaDB [(none)]> drop database aaaa;

在192.168.10.11上查看是否删除 MariaDB [(none)]> show databases; +——————————+ | Database | +——————————+ | information_schema | | mysql | | performance_schema | | test | +——————————+

  1. <a name="44549bb7"></a>
  2. ### 3. MySQL一主多从备份
  3. 1. 与mysql主从一致
  4. 2. 在192.168.10.11(主)授权slave能在192.168.10.13上登录并备份,(要关闭备服务器角色)

MariaDB [(none)]> grant replication slave on . to slave@’192.168.10.13’;

  1. 3. 192.168.10.13上配置同步参数

MariaDB [(none)]> change master to master_user=’slave’, master_password=’123456’, master_host=’192.168.10.11’, master_log_file=’mysql-bin.000004’, master_log_pos=456;

  1. <a name="435c63c7"></a>
  2. ### 4. MySQL多主一从
  3. 1. 实验准备<br />原理 : 在从slave上启动两个MySQL进程,来备份两个master的数据,同样也是通过binlog日志;<br />环境:两个master(192.168.10.11,192.168.10.12) 一个slave(192.168.10.13)
  4. 2. 在master1和master2上安装mariadb,并且开始binlog日志

master1 [root@master1 ~] yum install -y mariadb-server mariadb [root@master1 ~]# vim /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=11 [root@master1 ~]# systemctl restart mariadb [root@master1 ~]# mysql MariaDB [(none)]> grant replication slave on . to slave@’192.168.10.13’ identified by ‘123456’; MariaDB [(none)]> show master status; +—————————+—————+———————+—————————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +—————————+—————+———————+—————————+ | mysql-bin.000001 | 398 | | | +—————————+—————+———————+—————————+

master2 [root@master2 ~] yum install -y mariadb-server mariadb [root@master2 ~]# vim /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=12 [root@master2 ~]# systemctl restart mariadb [root@master2 ~]# mysql MariaDB [(none)]> grant replication slave on . to slave@’192.168.10.13’ identified by ‘123456’; MariaDB [(none)]> show master status; MariaDB [(none)]> show master status; +—————————+—————+———————+—————————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +—————————+—————+———————+—————————+ | mysql-bin.000003 | 399 | | | +—————————+—————+———————+—————————+

  1. 3. slave上安装mysql并初始化数据库,生成mysqlamysqlb

[root@slave ~]# yum install -y mariadb-server mariadb

[root@slave ~]# vim /etc/my.cnf [mysql_multi] mysqld=/usr/lib/mysqld_safe mysqladmin=/usr/bin/mysqladmin log=/tmp/multi.log

[mysqld11] port=3306 datadir=/var/lib/mysqla/ pid-file=/var/lib/mysqla/mysqld.pid socket=/var/lib/mysqla/mysql.sock user=mysql server-id=13

[mysqld12] port=3307 datadir=/var/lib/mysqlb/ pid-file=/var/lib/mysqlb/mysqld.pid socket=/var/lib/mysqlb/mysql.sock user=mysql server-id=13

初始化 [root@slave ~]# mysql_install_db —datadir=/var/lib/mysqla —user=mysql
[root@slave ~]# mysql_install_db —datadir=/var/lib/mysqlb —user=mysql

  1. 4. 将生成的目录属主改为mysql,并启动两个线程,完成主从配置

[root@slave lib]# cd /var/lib/ [root@slave lib]# chown mysql. mysqla/ -R [root@slave lib]# chown mysql. mysqlb/ -R

启动多线程 [root@slave lib]# mysqld_multi —defaults-file=/etc/my.cnf start 11 [root@slave lib]# mysqld_multi —defaults-file=/etc/my.cnf start 12

-P表示指定端口,-S表示指定套接字文件

[root@slave lib]# mysql -P 3306 -S /var/lib/mysqla/mysql.sock MariaDB [(none)]> change master to -> master_host=’192.168.10.11’, -> master_user=’slave’, -> master_password=’123456’, -> master_log_file=’mysql-bin.000001’, -> master_log_pos=398; MariaDB [(none)]> start slave

[root@slave ~]# mysql -P 3307 -S /var/lib/mysqlb/mysql.sock MariaDB [(none)]> change master to -> master_host=’192.168.10.12’, -> master_user=’slave’, -> master_password=’123456’, -> master_log_file=’mysql-bin.000003’, -> master_log_pos=399; MariaDB [(none)]> start slave

  1. <a name="8c10dc37"></a>
  2. ### 5. MySQL读写分离
  3. 1. 实验准备<br />官网下载jdk和amoeba;<br />原理 : 在MySQL主备的基础上,继续读写分离,使slave的不至于空闲,slave用来读,master用来写,这样既能冗余,也能提高资源利用率;<br />环境 : amoeba(192.168.10.11),master(192.168.10.12),slave(192.168.10.13)
  4. 2. 在amoeba上配置Java环境

[root@amoeba ~]# tar -xf jdk-13.0.1_linux-x64_bin.tar.gz -C /usr/local/ [root@amoeba ~]# mv /usr/local/jdk-13.0.1/ /usr/local/jdk [root@amoeba ~]# vim /etc/profile

添加这两行

export JAVA_HOME=/usr/local/jdk export PATH=$PATH:$JAVA_HOME/bin [root@amoeba ~]# source /etc/profile
[root@amoeba ~]# java -version #查看是否配置成功 openjdk version “1.8.0_222-ea” OpenJDK Runtime Environment (build 1.8.0_222-ea-b03) OpenJDK 64-Bit Server VM (build 25.222-b03, mixed mode)

  1. 3. matserslave上搭建主备

[root@master ~]# yum install -y mariadb-server mariadb [root@master ~]# vim /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=12 [root@master ~]# systemctl restart mariadb [root@master ~]# mysql MariaDB [(none)]> grant replication slave on . to slave@’192.168.10.13’ identified by ‘123456’; MariaDB [(none)]> show master status; +—————————+—————+———————+—————————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +—————————+—————+———————+—————————+ | mysql-bin.000003 | 398 | | | +—————————+—————+———————+—————————+

MariaDB [(none)]> create database web; MariaDB [web]> create table stu1(id int,name char(20),age int); MariaDB [web]> insert into stu1 values (1,’zhangsan’,15),(2,’klis’,19);

[root@slave ~]# yum install -y mariadb-server mariadb [root@slave ~]# vim /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=12 [root@slave ~]# systemctl restart mariadb [root@slave ~]# mysql MariaDB [(none)]> change master to master_host=’192.168.10.12’,master_user=’slave’,master_password=’123456’,master_log_file=’mysql-bin.000003’,master_log_pos=398; MariaDB [(none)]> start slave;

  1. 4. 解压并配置amoeba

[root@amoeba ~]# unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/ [root@amoeba ~]# cd /usr/local/ [root@amoeba ~]# mv amoeba-mysql-3.0.5-RC amoeba [root@amoeba local]# vim amoeba/conf/amoeba.xml

这里配置的是amoeba服务的监听地址端口和登录账号密码

8066 192.168.10.11 root 123456

[root@amoeba local]# vim amoeba/conf/dbServers.xml

3306 web test 123456 #上面定义的抽象服务器一个给下面标签重复使用 #定义master,slave分别用来连接mysql的master和slave 192.168.10.12 192.168.10.13

定义多服务器池,将某一类服务器放在一个服务器池中;

将server1添加到write服务器池,server2添加到read池

1 server1 1 server2

[root@amoeba local]# vim amoeba/conf/amoeba.xml

定义write服务器池只可写,read服务器池只读

master

slave

master

  1. 5. 授权amoeba定义的用户可以登录mysql,并启动amoeba

在master和slave上都要授权

MariaDB [web]> grant all on web.* to test@’192.168.10.11’ identified by ‘123456’;

[root@localhost ~]#./amoeba/bin/launcher start & #后台启动amoeba [root@localhost ~]# netstat -ntl #看到8066端口就说明amoeba启动 tcp6 0 0 192.168.10.11:8066 :::* LISTEN

  1. 6. 登录amoeba,验证读写分离,将主备停止

[root@localhost ~]# yum install -y mariadb #使用mysql客户端工具登录amoeba [root@localhost ~]# mysql -P8066 -uroot -p123456 -h192.168.10.11 MySQL [(none)]> MySQL [(none)]> insert into web.stu1 values (3,’lisi’,20); MySQL [(none)]> select * from web.stu1; +———+—————+———+ | id | name | age | +———+—————+———+ | 1 | zhangsan | 15 | | 2 | klis | 19 | +———+—————+———+

在amoeba上插入一段数据,却查询不到;说明写和读是在不同的服务器上进行的;

```