一、主从复制读写分离
1、主从复制的作用和特点
1)主从复制的作用
保证数据库数据的稳定性
2)主从复制的特点
需要开启二进制日志
从服务器监听主服务器二进制日志变化
将主服务器数据复制到从服务器上
主服务器故障数据不会丢失
2、读写分离
1)读写分离的作用
支持高并发合理分担负载任务
2)读写分离的特点
需要使用amoeba代理实现读写分离
客户端将写入数据提交到主mysql服务器
客户端将查询数据提交到从mysql服务器
读写分离实现力量负载分担增强服务稳定性支持高并发访问
配置主从复制,案例环境:
四台Linux服务器,一台客户端
一台master:配置主服务器,安装MySQL
两台slaves:分别安装MySQL
一台amoeba代理:安装amoeba代理
一台客户端:安装MySQL
推荐思路:
1)配置主从复制,安装NTP服务器,修改主配置文件
2)配置主MySQL服务器,修改主配置文件
3)创建主从复制账户名字为slave密码为pwd@123
4)配置从服务器,修改从MySQL主配置文件
5)设置从Master同步数据,启动从服务器
6)读写分离配置安装JDK
7)配置amoeba服务器,配置环境变量加载jdk和amoeba
8)配置amoeba登录MySQL读取和写入数据权限账户
9)修改amoeba主配置文件设置客户端访问amoeba账户密码
10)将MySQL主从服务器添加amoeba中,启动amoeba服务运行到后台
11)客户端测试连接amoeba,验证主从复制,读写分离
一.1.安装ntp服务器
[root@centos01~]# yum -y install ntp
2)修改ntp主配置文件
[root@centos01~]# vim /etc/ntp.conf
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 8
3)设置服务开机自动启动
[root@centos01~]# systemctl start ntpd
[root@centos01~]# systemctl enable ntpd
4)从MySQL服务器同步时间
[root@centos02~]# ntpdate 192.168.100.10
2.编译安装 mysql 数据库系统
1)、创建管理 mysql 的组及用户
[root@centos01~]# groupadd mysql
[root@centos01~]# useradd -M -s /sbin/nologin mysql -g mysql
2)、安装 MySQL 依赖程序 ncurses-devel
[root@centos01~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01~]# yum -y install ncurses-devel
3)、更换镜像文件、解压缩编译 MySQL 工具 cmake
[root@centos01~]# umount /mnt/
[root@centos01~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01~]# tar zxvf /mnt/cmake-2.8.6.tar.gz -C /usr/src/
4)、配置 cmake
[root@centos01~]# cd /usr/src/cmake-2.8.6/
[root@centos01 cmake-2.8.6]# ./configure
5)、编译安装 cmqke 程序
[root@centos01 cmake-2.8.6]# gmake && gmake install
6)、解压 mysql 程序
[root@centos01~]# tar zxvf /mnt/mysql-5.5.22.tar.gz -C /usr/src/
7)、配置 mysql 程序
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
-DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc
8)、编译安装 mysql 程序
[root@centos01 mysql-5.5.22]# make && make install
9)、设置安装目录数据的所有者
[root@centos01 ~]# chown -R mysql:mysql /usr/local/mysql/
10)、生成 mysql 服务配置文件
[[email protected]]# cp support-files/my-medium.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
11)、优化执行命令
[root@centos01~]# vim /etc/profile
PATH="$PATH:/usr/local/mysql/bin/"
[root@centos01~]# source /etc/profile
12)、生成 mysql 服务控制文件
[root@centos01 mysql-5.5.22]# cp support-files/mysql.server /etc/init.d/mysqld
13)、设置服务的执行权限
[root@centos01
~]# chmod +x /etc/init.d/mysqld
14)、添加系统服务
[root@centos01~]# chkconfig --add mysqld
[root@centos01~]# chkconfig --level 35 mysqld on
15)、初始化管理数据的账户数据库位置和数据位置
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
16)、启动 mysql 服务
[root@centos01~]# systemctl start mysqld
18)、为 mysql 数据库设置密码
[root@centos01~]# mysqladmin -u root password ‘pwd@123’
三台linux都安装MySQL数据库,命令一样
3.配置主MySQL服务器
1)修改MySQL主配置文件
[root@centos01~]# vim /etc/my.cnf
log-bin=mysql-bin
log-slave-updates = true
server-id = 10
重启MySQL数据库
[root@centos01~]# systemctl restart mysqld
2)登录数据库创建主从复制账户名字为slave密码为pwd@123
[root@centos01~]# mysql -u root -p
mysql> grant replication slave on . to ‘slave’@‘192.168.100.%’ identified by ‘pwd@123’;
3)查看Master状态
4.配置从服务器
1)修改从MySQL主配置文件
[root@centos02 ~]# vim /etc/my.cnf
log-bin=mysql-bin
relay-log=relay-log-bin
relay-log-index=relay-slave-bin.index
server-id = 11
2)重新启动数据库服务
[root@centos02~]# systemctl restart mysqld
3)登录数据库设置从Master同步数据
[root@centos02~]# mysql -uroot -ppwd@123
mysql>change master to
master_host=‘192.168.100.10’,master_user=‘slave’,master_password=‘pwd@123’,master_log_file=‘mysql-bin.000004’,master_log_pos=263;
4)启动从服务器
mysql> start slave;
5)查看从服务器
配置第三台从服务器
[root@centos03~]# vim /etc/my.cnf
log-bin=mysql-bin
relay-log=relay-log-bin
relay-log-index=relay-slave-bin.index
server-id = 12
重新启动数据库服务
[root@centos03~]# systemctl restart mysqld
登录数据库设置从Master同步数据
[root@centos03~]# mysql -uroot -ppwd@123
mysql>change master to
master_host=‘192.168.100.10’,master_user=‘slave’,master_password=‘pwd@123’,master_log_file=‘mysql-bin.000004’,master_log_pos=263;
启动从服务器,第三台配置完成
mysql> start slave;
验证主从复制,在主上面创建benet库,去从服务器上去查看
mysql> create database benet;
[root@centos02~]# mysql -uroot -ppwd@123
mysql> show databases;
二.读写分离
1.配置安装jdk
1)创建安装JDK目录
[root@centos04~]# mkdir /usr/local/jdk
2)配置安装JDK,使用Linux光盘
[root@centos04~]# cp /mnt/jdk-6u14-linux-x64.bin /usr/local/jdk/
[root@centos04~]# cd /usr/local/jdk/
[root@centos04 jdk]# ./jdk-6u14-linux-x64.bin
[root@centos04 jdk]# mv ./jdk1.6.0_14/* ./
3)设置JDK权限
[root@centos04~]# chmod -R 755 /usr/local/jdk/
2.配置amoeba服务器
1)创建amoeba目录
[root@centos04~]# mkdir /usr/local/amoeba
2)解压缩amoeba
[root@centos04~]# tar zxvf /mnt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
3)添加执行权限
[root@centos04~]# chmod -R 755 /usr/local/amoeba/
4)配置环境变量加载jdk和amoeba
[root@centos04~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk/
export CLASSPATH= C L A S S P A T H : CLASSPATH: CLASSPATH:JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH= J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JAVA_HOME/jre/bin: P A T H : PATH: PATH:HOME/bin
exportmAMOEBA_HOME=/usr/local/amoeba/
export PATH= P A T H : PATH: PATH:AMOEBA_HOME/bin
5)更新环境变量
[root@centos04~]# source /etc/profile.d/java.sh
[root@centos04~]# java -version 没配置之前是1.8.0版本
java -version
java version “1.6.0_14”
3.主服务器配置amoeba登录MySQL读取和写入数据权限账户
mysql> grant all on . to ‘bob’@‘192.168.100.%’ identified by ‘pwd@123’;
4.修改amoeba主配置文件设置客户端访问amoeba账户密码
[root@centos04 ~]# vim /usr/local/amoeba/conf/amoeba.xml
将Mysql主服务器添加amoeba中
[root@centos04~]# vim /usr/local/amoeba/conf/dbServers.xml
启动amoeba服务运行到后台
moeba/bin/amoeba start&
[root@centos04 ~]# netstat -anptu | grep 8066
7.客户端测试连接amoeba
安装MySQL数据库
[root@centos05~]# yum -y install mysql
1)登录amoeba
[root@centos05~]# mysql -uamoeba -ppwd@123 -h 192.168.100.40 -P 8066
2)创建数据库,测试写入去其他服务器查看
MySQL [(none)]> create database bdqn;
3)创建表
MySQL [bdqn]>create table student (姓名 char(10),性别 char(5),年龄 char(5),电话 char(11),primary key (电话));
4)插入数据
MySQL [bdqn]> insert into bdqn.student value (‘王超’,‘男’,‘18’,‘13581665204’);
在从服务器上面查看,可以查看到,停止服务,继续在aomeba写入数据在查看验证读
mysql> stop slave;
MySQL [bdqn]> insert into bdqn.student value (‘张航’,‘男’,‘18’,‘13581665201’);
说明查是在从服务器