MySQL集群
1. MySQL主从备份
- 实验准备
mysql主从服务器是通过二进制日志来实现备份;当主服务器上有更改数据库的操作时,会写入主服务器二进制日志中,通过主从将二进制日志传递给从服务器,从服务器通过二进制日志实现实时同步;
注意 : MySQL主从无法避免误操作
环境 : 两台版本一致的MySQL服务器; - 在主从服务器上安装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
3. 在主服务器上授权,从服务器保存授权信息
[root@master ~]# mysql -uroot
MariaDB [(none)]> grant replication slave on . to slave@’192.168.10.12’ identified by ‘123456’;
#每一个从服务器都需要一个账户来同步;授权slave用户在192.168.10.12主机上进行同步
MariaDB [(none)]> show master status; #获取master二进制日志信息 +—————————+—————+———————+—————————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +—————————+—————+———————+—————————+ | mysql-bin.000003 | 398 | | | +—————————+—————+———————+—————————+
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表示搭建成功
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 | +——————————+
<a name="7d0a60f4"></a>
### 2. Mysql主主备份
1. 实验准备<br />在连个服务器上都做主从备份;在上面的主从备份上,将二者角色互换,再做一次主从;
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
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;
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 | +——————————+
<a name="44549bb7"></a>
### 3. MySQL一主多从备份
1. 与mysql主从一致
2. 在192.168.10.11(主)授权slave能在192.168.10.13上登录并备份,(要关闭备服务器角色)
MariaDB [(none)]> grant replication slave on . to slave@’192.168.10.13’;
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;
<a name="435c63c7"></a>
### 4. MySQL多主一从
1. 实验准备<br />原理 : 在从slave上启动两个MySQL进程,来备份两个master的数据,同样也是通过binlog日志;<br />环境:两个master(192.168.10.11,192.168.10.12) 一个slave(192.168.10.13)
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 | | | +—————————+—————+———————+—————————+
3. 在slave上安装mysql并初始化数据库,生成mysqla和mysqlb
[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
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
<a name="8c10dc37"></a>
### 5. MySQL读写分离
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)
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)
3. 在matser和slave上搭建主备
[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;
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服务的监听地址端口和登录账号密码
[root@amoeba local]# vim amoeba/conf/dbServers.xml
定义多服务器池,将某一类服务器放在一个服务器池中;
将server1添加到write服务器池,server2添加到read池
[root@amoeba local]# vim amoeba/conf/amoeba.xml
定义write服务器池只可写,read服务器池只读
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
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上插入一段数据,却查询不到;说明写和读是在不同的服务器上进行的;
```