mysql 主从复制只写入_MySQL主从复制&读写分离

本文介绍了MySQL主从复制的原理和配置步骤,包括创建用户、授权、设置二进制日志等,以及如何实现从库的配置和状态检查。此外,还讲解了通过MySQL-Proxy实现读写分离的配置和测试过程,以提升数据库的高可用性和并发处理能力。
摘要由CSDN通过智能技术生成

MySQL主从复制

MySQL的主从复制只能保证主机对外提供服务,从机是不提供服务的,只是在后台为主机进行备份数据

首先我们说说主从复制的原理,这个是必须要理解的玩意儿:

理解:f9891b1fa8679be96f8c36ba307e4d1c.png

MySQL之间的数据复制的基础就是二进制日志文件bin log ,Master的所有操作都会纪录在二进制日志文件中,其他MySQL通过一个IO线程与其进行通信,监控这个日志文件的变化,并将变化赋值到Slave的中继日志relay中,然后SQL线程会执行中继日志中的相关操作,以此实现主从数据库的一致性,也就是主从复制

主从搭建,配置 Master

准备材料如下:

分别装在两台Linux服务器上的数据库

master:192.168.159.159

slave : 192.168.159.169

master数据库配置文件修改:my.cnf

各自的安装方式不一样,我是通过rpm方式安装的,

在这里扩展一下: 通过这两个命令,大致发现了我的MySQL的安装目录

d9b78574f38c259b10310b9fd2df5db4.png

当然我的配置文件在在 /etc/mysql/my.cnf 在[mysqld]段下添加如下内容

log-bin=mysql-bin

server-id=159

d8ab2b7c813f7d37c8dd310ac2f0120a.png

然后重启Mysql: service mysqld restart

登录到MySQL建立账户并授权给Slave

mysql> CREATE USER 'chen'@'192.168.159.169' IDENTIFIED BY 'chen';  #创建用户

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.159.169'; #为其权限

mysql>flush privileges;   #刷新权限

0219840d278636d286d4bd92266583ba.png

然后查看master状态,记录二进制文10922567.html件名( mysql-bin.000002 ) 和位置(787)

70dfd6b396ab3e02a73da4a70b0b3092.png

Master 到这里就配置完成了,下面配置 Slave

第一步修改从服务器的配置文件 : my.conf : server-id=135

e9e2b98fc5afe1ded0df9528f4a67250.png

第二步删除UUID文件: /var/lib/mysql/auto.cnf  后重新启动服务 :reboot

第三步登入MySQL,进行从服务器的配置 ,并开启从服务器复制功能

change master to master_host='192.168.159.159',master_port=3306,master_user='chen',master_password='chen',master_log_file='mysql-bin.000002',master_log_pos=787;

开启从服务器的复制功能 : start slave;

10922567.html

6f75b8324ae0289b74e4cf90c597530f.png

检查从服务器的复制功能状态:show slave status\G

5fb76d66d91f7975ec4ddc457eec6493.png

相关的命令:

stop slave 可以停止 从服务器

reset slave 清空从服务器的规则

start slave 启动从服务器

show slave status 查看从服务器状态

show master status 查看主服务器状态

注意:当我们已经完成了主从后,在不关闭的情况下,在创立新的主从关系会报错

10922567.html下面就可以开始测试 ,测试就不写具体得了,在主服务器中增加或者修改一个数据,然后我们在从服务器中查询看是否做到数据一致即可。

MySQL-Proxy实现读写分离

主从的作用主要体现在备份数据上,要想做到MySQL支持高可用和高并发还需要集群,完成主从复制和读写分离

读写分离环境:

主服务器:192.168.159.159 + MySQL-Proxy读写分离软件

从服务器:192.168.159.169

从服务器:192.168.159.179

三台服务器都关闭防火墙 iptables -L service iptablesstop

9779669eef55ccdb4f70f955bed71d83.png

10922567.html

三台服务器关闭selinux 采用临时关闭,长久关闭修改 : /etc/selinux/config 将SELINUX设置为disabled

临时关闭 :setenforce 0 | 查看状态: getenforce

bae53af9f161a5168bf9a0ffe224b659.png

10922567.html

一、安装MySQL-Proxy

我是上传到 /usr/local/ 下的

tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz  #解压文件

mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy   #更改目录名

二、创建主配置文件

cd /usr/local/mysql-proxy

mkdir lua #创建脚本存放目录

mkdir logs #创建日志目录

cp share/doc/mysql-proxy/rw-splitting.lua ./lua#复制读写分离配置文件

cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

vi /etc/mysql-proxy.cnf   #创建配置文件,并将下面内容写入

[mysql-proxy]

user=root

admin-username=root   #主从mysql共有的用户

admin-password=123456 #用户的密码

proxy-address=192.168.159.110:4040                #mysql-proxy运行ip和端口,不加端口,默认4040

proxy-read-only-backend-addresses=192.168.159.169 #指定后端从slave读取数据

proxy-backend-addresses=192.168.159.159           #指定后端主master写入数据

proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置

admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua    #指定管理脚本

log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log         #日志位置

log-level=debug    #定义log日志级别,由高到低分别有(error|warning|info|message|debug)

daemon=true       #以守护进程方式运行

keepalive=true    #mysql-proxy崩溃时,尝试重启

#保存退出后 给权限

chmod 660 /etc/mysql-porxy.cnf

三、修改读写分离配置文件

vim /usr/local/mysql-proxy/lua/rw-splitting.lua

vim /usr/local/mysql-proxy/lua/rw-splitting.lua

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1,#默认超过4个连接数时,才开始读写分离,改为1

max_idle_connections = 1, #默认8,改为1

is_debug = false

}

end

四、启动MySQL-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

五、测试读写分离

在主服务器上创建用户用于MySQL-Proxy使用,从服务器也会同步这个操作

grant all on .to 'chen'@'192.168.159.159' identified by 'root';

mysql> grant all on *.* to 'chen'@'192.168.159.159' identified by 'root';

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

然后就报错了,MySQL的密码策略阻止了我们,不过没关系,我已经见怪不怪了,设置过好多回了

SHOW VARIABLES LIKE 'validate_password%';#查看mysql初始密码策略

set global validate_password_policy=LOW; #设置密码的验证强度等级,只验证密码长度

set global validate_password_length=4; #默认密码长度为8,我们给其设置为4

再次执行: grant all on .to 'chao'@'192.168.159.179' identified by 'root';

d6fed228c5af06e9dbe5d823f99d8712.png

10922567.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>