mysql
首先咱们说说主从复制的原理,这个是必需要理解的玩意儿:linux
理解: sql
MySQL之间的数据复制的基础就是二进制日志文件bin log ,Master的全部操做都会纪录在二进制日志文件中,其余MySQL经过一个IO线程与其进行通讯,监控这个日志文件的变化,并将变化赋值到Slave的中继日志relay中,而后SQL线程会执行中继日志中的相关操做,以此实现主从数据库的一致性,也就是主从复制数据库
准备材料以下:vim
分别装在两台Linux服务器上的数据库后端
master:192.168.159.159服务器
slave : 192.168.159.169并发
master数据库配置文件修改:my.cnf less
各自的安装方式不同,我是经过rpm方式安装的,ide
在这里扩展一下: 经过这两个命令,大体发现了个人MySQL的安装目录
固然个人配置文件在在 /etc/mysql/my.cnf 在[mysqld]段下添加以下内容
log-bin=mysql-bin
server-id=159
而后重启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; #刷新权限
而后查看master状态,记录二进制文件名( mysql-bin.000002 ) 和位置(787)
第一步修改从服务器的配置文件 : my.conf : server-id=135
第二步删除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;
检查从服务器的复制功能状态:show slave status\G
相关的命令:
stop slave 能够中止 从服务器
reset slave 清空从服务器的规则
start slave 启动从服务器
show slave status 查看从服务器状态
注意:当咱们已经完成了主从后,在不关闭的状况下,在创立新的主从关系会报错
主从的做用主要体如今备份数据上,要想作到MySQL支持高可用和高并发还须要集群,完成主从复制和读写分离
读写分离环境:
主服务器:192.168.159.159 + MySQL-Proxy读写分离软件
从服务器:192.168.159.169
从服务器:192.168.159.179
三台服务器都关闭防火墙 iptables -L service iptablesstop
三台服务器关闭selinux 采用临时关闭,长久关闭修改 : /etc/selinux/config 将SELINUX设置为disabled
临时关闭 :setenforce 0 | 查看状态: getenforce
我是上传到 /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
/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';
还没玩,这几天有点事搁置了,到如今两台Slave只有一台创建与Master链接,另外一台IO出了问题。一直处于失败状态,到如今也没搭建成功,后面再补上,
2019年5月27日 22:28:59 固然还有MyCat的分库分表的运用,周末再来研究研究
2019年6月10日 23:17:24 原本是打算此次放端午补全的,结果在家里带了两天的娃,小娃娃哭起来好可怕