马哥教育--第十九周
1、主从复制及主主复制的实现
主从复制实现:
主:
安装mysql
安装过程:略
#开启binlog
vim /etc/my.cnf
server-id=1
log-bin=/app/mysql-binlog/mysql-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
重启服务
systemctl restart mysql
查看二进制日志位置:

创建复制用户:
grant replication slave on *.* to repluser@'192.168.11.%' identified by 'bernie';
从节点:
安装相同版本mysql:暗转过程略
vim /etc/my.cnf
#从节点不需要开启log-bin
[mysqld]
server-id=2 #与主节点不同的server-id
read-only=ON
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
重启服务
systemctl restart mysql
CHANGE MASTER TO MASTER_HOST='192.168.11.8', MASTER_USER='repluser', MASTER_PASSWORD='bernie', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
start slave;
主主复制实现:
主:
vim /etc/my.cnf
[mysqld]
server-id=1
log-bin
auto_increment_offset=1
auto_increment_increment=2
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
重启服务
server mysql restart
创建复制用户:
grant replication slave on *.* to repluser@'192.168.11.%' identified by 'bernie';
查看二进制日志位置:

从:
vim /etc/my.cnf
[mysqld]
server-id=2
auto_increment_offset=2
auto_increment_increment=2
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
service mysql restart
登录mysql执行:
CHANGE MASTER TO MASTER_HOST='192.168.11.8', MASTER_USER='repluser', MASTER_PASSWORD='bernie', MASTER_PORT=3306, MASTER_LOG_FILE='localhost-bin.000003', MASTER_LOG_POS=154;
start slave;
2、xtrabackup实现全量+增量+binlog恢复库
【1】安装percona extrabackup
官网下载RPM包
yum -y install percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm
mkdir /backup
xtrabackup -uroot -p"magedu" --backup --target-dir=/backup/base #第一次全备
修改数据
xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base #增量备份
修改数据
xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1 #第二次增量备份
数据恢复:
预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
xtrabackup --prepare --apply-log-only --target-dir=/backup/base
合并第1次增量备份到完全备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
service mysql stop
rm -rf /data/mysql/
xtrabackup --copy-back --target-dir=/backup/base
chown -R mysql.mysql /data/mysql
service mysql start
3、MyCAT实现MySQL读写分离
三台主机,其中两台主机部署主从同步,过程略
部署mycat
【1】安装java环境
tar xvf jdk-8u251-linux-x64.tar.gz -C /usr/local/src/
ln -s /usr/local/src/jdk1.8.0_251/ /usr/local/jdk
vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
. /etc/profile.d/jdk.sh
java -version
【2】安装部署mycat
tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps
echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
source /etc/profile.d/mycat.sh
vim /apps/mycat/conf/server.xml
...省略...
<user name="root"> #连接Mycat的用户名
<property name="password">magedu</property> #连接Mycat的密码
<property name="schemas">TESTDB</property> #数据库名要和schema.xml相
对应 此处的数据库名,是mycat中使用的逻辑名
</user>
</mycat:server>
vim /apps/mycat/conf/schema.xml
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="localhost1" database="mycat" /> #此处的数据库代表mysql数据库中的库名
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" #1代表读写分离
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="host1" url="192.168.11.8:3306" user="root" password="123456">
<readHost host="host2" url="192.168.11.18:3306" user="root" password="123456"
/>
</writeHost>
</dataHost>
</mycat:schema>
#重启mycat
mycat restart
注意:要保证能使用root/123456权限成功登录192.168.11.8和192.168.11.28机器上面的mysql数据库。同时, 也一定要授权mycat机器能使用root/123456权限成功登录这两台机器的mysql数据库!!这很重要, 否则会导致登录mycat后,对库和表操作失败!
在主数据库中操作:
create database mycat; #创建之前指定的数据库
GRANT ALL ON *.* TO 'root'@'192.168.11.%' IDENTIFIED BY '123456' ; #创建之前指定的root用户
flush privileges;
连接mycat测试
mysql -uroot -pmagedu -h127.0.0.1 -P8066 -DTESTDB
show databases;
use TESTDB;
create table t1(id int);
select @@server_id;
select @@hostname;
浙公网安备 33010602011771号