Mysql主从复制读写分离
一、Mysql主从复制读写分离
1、Mysql的主从复制
1)Mysql主从复制的作用
避免单节点故障
保证数据库的可靠性
2)Mysql可靠性解决方案
主从复制
主主复制
mysql MHA
mysql MMM
mysql 双机热备
2、Mysql读写分离
1)Mydql读写分离的作用
加快用户访问速度
增加访问并发量
2)读写分离方式
mysql proxy:需要二次开发,使用复杂
amoeba:java语言编写,配置简单实用方便
3、mysql主从复制的原理和复制的类型
1)mysql主从复制的原理
开启二进制日志功能
从mysql服务器监听主mysql复制二进制日志变化复制到本地
从mysql读取主mysql日志应用主mysql日志从而保证数据库状态的一致性
2)mysql的复制类型
基于语句的复制
基于行的复制
混合的复制类型
二、配置主从复制
1、配置NTP服务器
安装NTP
yum -y install ntp
修改NTP配置文件
vim /etc/ntp.conf
16 log-bin=mysql-bin //开启二进制日志
18 server-id = 10 //设置mysql服务器ID
19 log-slave-update=true //开启日志复制功能
启动服务设置开机自动启动
systemctl start ntpd
systemctl enable ntpd
从服务器同步时间
ntpdate 192.168.100.10
2、安装Mysql
安装mysql依赖程序
yum -y install cmake ncurses-devel
创建管理mysql组和用户
groupadd mysql
useradd -M -s /sbin/nologin -g mysql mysql
解压mysql压缩包
tar zxvf /mnt/mysql-5.5.22.tar.gz -C /usr/src/
进入mysql文件夹里
cd /usr/src/mysql-5.5.22/
配置mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/user/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc
编译安装mysql
make && make install
生成mysql服务配置文件
cp support-files/my-medium.cnf /etc/my.cnf
生成服务配置文件
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
添加系统服务设置开机自动启动
chkconfig --add mysqld
chkconfig --level 35 mysqld on
优化mysql命令
vim /etc/profile
初始化mysql
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
启动服务
systemctl start mysqld
监听端口
netstat -anptu | grep 3306
设置mysql访问密码
mysqladmin -uroot password
登录mysql
mysql -uroot -ppwd@123
为其他两台虚拟机安装mysql数据库
3、修改主mysql配置文件
修改配置文件
vim /etc/my.cnf
16 log-bin=mysql-bin //开启二进制日志
18 server-id = 10 //设置mysql服务器ID
19 log-slave-update=true //开启日志复制功能
重新启动mysql服务加载配置文件
systemctl restart mysqld
4、修改从mysql配置文件
vim /etc/my.cnf
16 log-bin=mysql-bin
18 server-id = 20
19 relay-log=relay-log-bin
20 relay-log-index=slave-relay-bin.index
5、配置主从复制
创建主从复制账户
grant replication slave on *.* to 'slave'@'192.168.100.%' identified by 'pwd@123';
查看主mysql状态
show master status;
配置从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;
启动从数据库复制进程
start slave;
查看从mysql复制状态
show slave status\G;
使用主数据库创建新的数据库并查看
使用从数据库查看
三、读写分离
1、安装JDK和amoeba
配置所有hosts文件
vim /etc/hosts
将jdk复制到当前位置
cp /mnt/jdk-6u14-linux-x64.bin ./
解压JDK
./jdk-6u14-linux-x64.bin
移动JDK位置
mv jdk1.6.0_14/ /usr/local/java
创建amoeba配置文件
mkdir /usr/local/amoeba
tar zxvf /mnt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
配置环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib/:$JAVA_HOME/jre/bin:$PATH:$HOME/bin/
export AMOEBA=/usr/local/amoeba
export PATH=$PATH:$AMOEBA/bin
source /etc/profile.d/java.sh
查看jdk版本
java -version
2、配置读写分离
创建amoeba访问mysql数据库读写分离庄户
grant all on *.* to 'write'@'192.168.100.%' identified by 'pwd@123';
修改amoeba配置文件设置登录amoeba账户
vim /usr/local/amoeba/conf/amoeba.xml
10 <property name="port">8066</property> //访问amoeba端口
27 <property name="user">amoeba</property> //登录amoeba账户
28 <property name="password">pwd@123</property> //登录amoeba密码
111 <property name="defaultPool">master</property>
113 <property name="writePool">master</property> //主mysql
114 <property name="readPool">slaves</property> //读取组名字slaves
115 <property name="needParse">true</property>
修改配置文件添加读写节点
vim /usr/local/amoeba/conf/dbServers.xml
19 <property name="port">3306</property> //amoeba访问mysql端口
22 <property name="user">write</property> //amoeba访问mysql账户
23 <property name="password">pwd@123</property> //amoeba访问mysql密码
38 <dbServer name="master" parent="abstractServer">
39 <factoryConfig>
40 <property name="ipAddress">192.168.100.10</property>
41 </factoryConfig>
42 </dbServer>
43
44 <dbServer name="slave01" parent="abstractServer">
45 <factoryConfig>
46 <property name="ipAddress">192.168.100.20</property>
47 </factoryConfig>
48 </dbServer>
49
50 <dbServer name="slave02" parent="abstractServer">
51 <factoryConfig>
52 <property name="ipAddress">192.168.100.30</property>
53 </factoryConfig>
54 </dbServer>
55 <dbServer name="slaves" virtual="true">
56 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
57 <property name="loadbalance">1</property>
58 <property name="poolNames">slave01,slave02</property>
59 </poolConfig>
60 </dbServer>
启动amoeba服务
/usr/local/amoeba/bin/amoeba start&
3、配置mysql客户端
安装mysql客户端
yum -y install mariadb
登录amoeba
mysql -h 192.168.100.40 -P8066 -uamoeba -ppwd@123
创建数据库创建表
使用另一台查看数据库