MySQL主从可以实现MySQL的读写分离,master上进行写操作,同步数据库,slave上进行读操作,可以极大的提升性能,降低服务器负载,下面来做主从配置详解!
环境: centos 7 192.168.1.1 atlas代理服务 centos 7 192.168.1.2 主Mysql数据库 centos 7 192.168.1.3 从Mysql数据库
1.三台机器都安装centos7 2.相互ping通,并关闭防火墙(测试) 3.主从服务器都安装mysql 5.6
主从服务器MySQL安装
- 下载yum的repo源并安装,执行安装后,在/etc/yum.repos.d/这个目录下多出mysql-community-source.repo和mysql-community.repo: Centos7: wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm
2.先查看机器是否默认已安装过mysql。 yum repolist all | grep mysql 如果有记得删除再安装。
3.安装mysql服务 yum install mysql-community-server -y
4.设置开机启动并启动服务 systemctl enable mysqld systemctl start mysqld
主从数据库的配置
1.首先进入主的mysql数据库中,创建用户saybot,密码123456. mysql> grant all on . to saybot@'%' identified by "123456";
2.修改saybot的访问权限 进入数据库 use mysql; 修改权限% update user set host = '%' where user = 'saybot'; 查看权限是否成功。可以看到,saybot的用户,host已经修改成百分号了。 select user, host from user; 更新数据库信息。 flush privileges;
3.主从MySQL都需要创建一个数据库,我这创建的数据库是redmine create database redmine;
【主意:主数据库与从的数据库同样配置, 记得要创建同样的数据库哦】
修改主从服务器的配置文件
配置主服务器的配置文件(新增如下配置。)
vi /etc/my.conf
#主从复制配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#需要备份的数据库
binlog-do-db=test
#不需要备份的数据库
binlog-ignore-db=mysql
#启动二进制文件
log-bin=mysql-bin
#服务器ID
server-id=1
【主意:若没有配置binlog-do-db和binlog_ignore_db,表示备份全部数据库。】
重启服务 systemctl restart mysqld
进入数据库配置主从复制的权限 grant replication slave on . to 'saybot'@'%' identified by '123456';
锁定数据库 flush tables with read lock;
查看主数据库信息,记住下面的“File”与“Position”的信息,它们是用来配置从数据库的关键信息。 show master status; 注意:在配置主从同步的时候会用到这个里面的信息。
配置从服务器 1.修改配置添加如下 vi /etc/my.cnf server-id=2
- 进入数据库 mysql -uroot -p
mysql> change master to master_host='192.168.1.1', -> master_user='saybot', -> master_password='123456', -> master_port=3306, -> master_log_file='mysql-bin.000002', -> master_log_pos=328, -> master_connect_retry=10; Query OK, 0 rows affected (0.01 sec) 注意:file和log_pos是主mysql的信息。
启动服务 start slave;
检查主从复制状态,要看到下列标红的信息中,两个都是Yes,才说明主从连接正确,如果有一个是No,需要重新确定刚才记录的日志信息,停掉“stop slave”重新进行配置主从连接。 show slave status \G;
注意:如果在配置主动数据库同步的时候,主库里面有很多数据的话,需要从主库里面将数据导出,然后再倒入到从库里面。保持数据一致。 可以参考如下数据库导出和导入: mysqldump -uroot -p111111 -R -E --triggers --single-transaction --master-data=2 --hex-blob --opt --databases xxxxxx >/tmp/xxxx.sql
mysql -uroot -p111111 </tmp/xxxx.sql
编译安装代理服务
安装依赖 yum update -y nss curl libcurl yum group install "Development tools" yum install gcc make libcurl-devel openssl-devel gmp-devel tar libffi-devel gettext-devel -y yum install -y tcpdump net-tools jemalloc-devel libevent-devel glib2-devel lua-devel lua mysql-devel git #yum install glib2 #yum install jemalloc
cd /opt && git clone https://github.com/Qihoo360/Atlas cd Atlas
需要先修改源代码 vim /opt/Atlas/src/network-conn-pool-lua.c 220行:char tmp[] = {to_write - 4, 0, 0, 1, 0x85这行代码 将0x85修改成0x87之后,保存退出
./bootstrap.sh make clean make && make install
配置项添加或变更这几项: daemon=true event-threads=2 charset=utf8mb4 sql-log=ON max_conn_for_a_backend=0 wait-timeout=60
编辑配置文件vi /usr/local/mysql-proxy/conf/config.cnf
[mysql-proxy] admin-username=admin ###管理接口的用户名 admin-password=admin123 ###管理接口的密码 #admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua log-level=debug ####日志级别 log-path=./log #####日志路径 #plugin-dir=./lib event-threads=2 ##工作线程数,对Atlas的性能有很大影响,可根据情况适当设置 instance=config ####配置文件的名字 proxy-address=0.0.0.0:1234 #Atlas监听的工作接口IP和端口 admin-address=0.0.0.0:2345 #Atlas监听的管理接口IP和端口
####Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔 proxy-backend-addresses=192.168.50.199:3306
###Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔 proxy-read-only-backend-addresses=192.168.0.206:3306
###用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码! pwds=saybot:Ze2h********************
daemon=true #####设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格 keepalive=true ####设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
charset=utf8mb4 ###默认字符集 sql-log=ON ###########日志开关, max_conn_for_a_backend=0 wait-timeout=60
配置完成后启动服务 cd /usr/local/mysql-proxy/bin/ ####进入启动文件目录 ./mysql-proxyd config start ####启动服务
主从通过代理实现读写分离,在调用的时候可以直接用代理的ip,并使用代理的端口1234即可。
参考文章 https://www.cnblogs.com/yyhh/p/5084844.html