实现数据的实时同步,放置数据的丢失,是目前保证数据完整最成熟的技术。
应用线程:
主服务器包含了数据传输的IO线程
从服务器包含了数据传输的IO线程和提供数据解析SQL线程
操作对象:
主服务器的bin-log文件内容以及位置
从服务器的maskinfo文件和relay log文件
操作时间:
当主服务器的mysql数据库的内容发生改变时
前提:打开binarylog,否则无法实现
从服务器通过IO线程向主服务器发送数据请求,请
求日志文件的内容和位置。(或者从上次请求数据的内
容开始)
主服务器接受到请求后,通过负责辅助的IO线程把
数据数据返回给从服务器(包括文件内容和位置)。
从服务器接受到主服务器的数据之后,将内容写入
relay log文件并且读取到Master端的bin-log文件
和位置记录, 记录到master-info文件当中,以便
下一次能够清楚的告诉Master我bin-log要从的哪
个位置开始往后的内容,请发给我。
从服务器通过SQL线程将接受到的内容解析到自己
的数据库。
在主服务器上:
打开bin-log日志文件
设置配置文件server_id=1
关闭log-slave-updates
建立一个内部复制通信用户(grant,刷新权限)
show master status\G;(查看状态)
在从服务器上:
打开bin-log日志文件
设置配置文件server_id=2
打开log-slave-updates
mysql 命令行输入
stop slave
change master to 接主服务器的IP,用户名,密码,同步的二 进制文件及位置
start slave
show slave status\G(同上)
mysql权限配置错误
解决方法:删除用户,重新添加用户并刷新权限
2)解压jdk软件包(注意jdk包适用系统位数)
tar -xvf jjdk-7u40-linux-x64.tar.gz -C /Amoeba/
3)配置环境变量
# vim /etc/profile
JAVA_HOME=/Amoeba/jdk1.7.0_40
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
export CLASLASSPATH
source /etc/profile刷新环境变量
4)测试
java -version
1)解压amoeba安装包
unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba/
2)添加权限
chmod -R +x /usr/local/amoeba/bin/
1)添加授权用户amoeba
grant all privileges on *.* to 'amoeba'@'%' identified by 'amoeba123';
2)刷新权限
flush privileges
1)amoeba配置
<property name="port">9006</property>
指定监听端口9006
<property name="ipAddress">10.0.0.22</property>
指定本机10.0.0.22
<property name="user">root</property>
本机用户root
<property name="password">123456</property>
root用户密码
2)主服务器端登录信息
<property name="port">3306</property>
主服务器mysql对应端口
<property name="ipAddress">10.0.0.201</property>
主服务器IP
<property name="user">amoeba</property>
授权的amoeba用户
<property name="password">amoeba123</property>
授权用户密码
3)从服务器配置
<property name="port">3306</property>
从服务器开启的端口
<property name="ipAddress">10.0.0.202</property>
从服务器IP
<property name="user">amoeba</property>
从服务器授权用户amoeba
<property name="password">amoeba123</property>
从服务器的密码
4)配置master和slave负载均衡池pool
主服务器
<dbServer name="master" virtual="true">
<property name="poolNames">server1</property>
从服务器
<dbServer name="slave" virtual="true">
<propertyname="poolNames">server1,server2</property>
5)配置master和slave读写分离
<property name="defaultPool">master</property>
默认
<property name="writePool">master</property>
写
<property name="readPool">slave</property>
读
6)修改Amoeba启动脚本
vim /usr/local/amoeba/bin/amoeba
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k" 将此行注释掉,增加一下行
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"增加这一行
7)启动并且查看状态
nohup bash -x amoeba &
启动服务
cat nohup.out 日志查看那是否成功
ps -ef | grep amoeba查看进程是否启动成功
心得:主从主要解决数据的安全问题,读写分离主要解决服务器的压力过大的问题,利用主从和读写分离能很好的解决服务器上面的压力和数据安全问题。