一, MYSQL 主从备份
为保证数据库的安全和效率, 可以使用主从备份, 当有写的操作可以在主服务器上操作, 操作完之后备份到从服务器上, 当有读操作时可以访问从服务器, 这样在一定程度上保证了数据库的安全, 当主服务器的 mysql 挂掉之后, 数据也不会丢失, 同时也提高了数据库的效率.
1. 环境
- master 192.168.174.129
- slave 192.168.174.130
master 和 slave 的防火墙都为关闭状态, selinux 也为 disabled, 不然会出错, selinux 设置重启生效.
2. 在 master 和 slave 上安装 mysql 和 mysql-server
注: mysql master 数据库版本和 slave 数据库版本要相同, 或者 slave 版本比 master 高
mysql 安装可以 yum 安装也可以源码安装, 本文采用 yum 安装
yum -y install mysql mysql-server
在主服务器和从服务器上打开 mysql 服务, 并设置开机自启
- service mysqld restart
- chkconfig mysqld on
3.mysql mater 配置
打开 mysql 配置文件 / etc/my.cnf, 在 mysqld 下添加
log-bin=mysql-bin --------- 启动二进制日志系统
binlog-do-db=test --------- 要同步的数据库
server-id=1 --------- 服务 id, 主服务器 server-id 比从服务器 server-id 小
binlog-ignore-db=mysql ------ 避免同步 mysql 用户配置
重启 mysql
service mysqld restart
进入数据库 mysql
mysql -u root -p
初始状态 mysql 默认没有密码, 如果要设置密码可以使用 mysqladmin -u root -p "password", 设置密码, 这样也会更安全一些
创建一个同步账号, 并赋予权限
查看 master 的状态信息, 记录下 file 和 position 的值, 在后边的 slave 配置中会用到
4.mysql slave 配置
打开 mysql 配置文件 / etc/my.cnf, 在 mysqld 下添加
server-id=2 -------- 服务 id, 从服务器 server-id 比主服务器 server-id 大
replication-ignore-db=mysql -- 屏蔽对 mysql 库的同步
replication-do-db=test --------- 要同步的数据库名, 与主服务器配置保持一致
master-connect-retry=60 -------- 断点重连时间
- master-host=192.168.174.129
- master-user=test
- master-password=test
- master-port=3306
进入 mysql
mysql -u root -p
停止 slave 服务: stop slave;
配置 slave 同步, 完成后开启 slave 服务
change master to master_host='192.168.174.129',master_user='test',master_password='test',master_log_file='mysql-bin.000026',master_log_pos=346;
这里的 master_log_file 和 master_log_pos 要和前面记录的 file 和 position 一致
查看 slave 状态
show slave status\G;
当两个 running 都为 yes 时即配置成功, 可以在主服务上对 test 数据库操作, 看是否这些操作会同步到从服务器上
二, MySQL 主主备份
主主备份的设置就是将从服务器上的设置在主服务器上操作一遍, 主服务器上的操作在从服务器上操作一遍, 这里就不再赘述
三, MySQL+Keepalived
环境:
keepalived 主机: 192.168.174.129
keepalived 备机: 192.168.174.130
VIP:192.168.174.222
测试主机: 192.168.174.133
master,slave,keepalived 主机, keepalived 备机, 测试主机的防火墙都为关闭状态, selinux 也为 disabled, 不然会出错, selinux 设置重启生效.
1.keepalived
keepalived 可以监控服务状态, 当主服务宕机后可以将服务自动漂移至从服务, 利用 keepalived+mysql 可以实现 mysql 的高可用性, 当 mysql 主服务器宕机后, 从服务器接管主服务器的工作, 保证对外服务, keepalived 还可以实现虚拟 ip 对外服务, 保证内部服务器安全, 同时 keepalived 的主从机制也保证了服务的高可用性
2.keepalived 安装
这里和前边博文中 keepalived 安装步骤基本一样, 主要是配置文件不一样, 博主为熟悉 keepalived 安装又啰嗦了一遍, 下载 keepalived 源码安装包, 解压
进入 keepalived 解压目录, 执行
./configure --prefix=/usr/local/keepalived
拷贝 keepalived 启动文件到 / etc/init.d 下, 这样 keepalived 服务才能为系统识别
cp /root/package/keepalived-1.4.5/keepalived/etc/init.d /etc/init.d
执行
- cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
- cp /usr/local/keepalived/sbin/keepalived /usr/sbin
新建文件夹 keepalived
mkdir /etc/keepalived
将 keepalived 的配置文件拷贝过来, keepalived 启动时会从 / etc/keepalived 目录下查找 keepalived.conf 配置文件, 如果没有找到则使用默认的配置.
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
以上操作在 keepalived 主机和备机上都执行
修改主机配置文件
修改备机配置文件
主机和备机配置文件只有 router_id 和 vrrp_instance 的 state 和 priority 不同
开启主机和备机的 keepalived 服务
service keepalived start
在测试机上 ping 虚拟 IP192.168.174.222, 成功, 而且我的内网内 192.168.174.222 的 ip
使用虚拟 IP192.168.174.222 连接 3306 端口的 mysql 服务, 连接之前需要在 mysql 主服务和 mysql 从服务器为测试机 ip 赋予权限
使用虚拟 IP192.168.174.222 连接 3306 端口的 mysql 服务, 使用授权的用户和密码, 成功
查看当前数据库
查看 mysql 从服务器数据库可知连接的应该是从数据库
停止 mysql 从服务器服务: service mysqld stop, 再次在测试机连接虚拟 IP192.168.174.222 连接 3306 端口的 mysql 服务, 成功
也可以查出数据库
keepalived+mysql 主从同步成功
四, MySQL 读写分离
mysql 读写分离是在 mysql 主从同步的基础上做的, mysql 主服务器负责写, 多台 mysql 从服务器负责读, mysql 主从同步仅仅是把 mysql 主服务器的数据库同步到了 mysql 从服务器上, 如果要实现读写分离, 还需要一个服务器去协调. 这个服务就是 mysql-proxy.
1. 环境配置
mysql 主服务器: 192.168.174.129
mysql 从服务器: 192.168.174.130
mysql-proxy 服务器: 192.168.174.131
master,slave 以及 mysql-proxy 服务器的防火墙都为关闭状态, selinux 也为 disabled, 不然会出错, selinux 设置重启生效.
2.mysql-proxy 安装
mysql 的读写分离是靠过 rw-splitting.lua 脚本实现的, 因此需要安装 lua.
安装之前先安装包依赖
yum -y install gcc* gcc-c++ autoconf automake zlib* libxml* ncurses-devel libmcrypt libtool* flex* pkgconfig* libevent* glib*
wget 下载 lua, 很小, 很快就能下载完成, 解压
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
进入 lua 解压后目录, 执行
- make linux
- make && make install
- export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"
下载 mysql-proxy, 解压
执行
- mkdir /usr/local/mysql-proxy
- cp */usr/local/mysql-proxy
cd /usr/local/mysql-proxy
修改 rw-splitting.lua 文件
修改连接数, 默认为 4, 即只有当有四台 mysql 服务器时才启用读写分离, 为了试验成功, 改为 1
vim /usr/local/mysql-proxy/rw-splitting.lua
启动 msyql-proxy
- cd /usr/local/mysql-proxy/bin
- ./mysql-proxy --proxy-read-only-backend-addresses=192.168.174.130:3306 --proxy-backend-addresses=192.168.174.129:3306 --proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua &
参数说明:
--proxy-read-only-backend-addresses --------- 只读服务器 ip 地址
--proxy-backend-addresses ---------------------- 服务器地址 (mysql 主服务器)
--proxy-lua-script ----------------------------lua 脚本路径
& ----------------------------------------------------- 表示后台执行
mysql 主从备份 + mysql 读写分离配置完成.
来源: http://www.linuxidc.com/Linux/2018-09/154113.htm