搜索
首页数据库mysql教程mysql集群一:主从复制,通过mysql-proxy做负载均衡_MySQL

Mysql集群

mysql集群架构方式很多,根据不同的需求做不一样的架构,简单一点的就是mysql的replication,也就是Mysql的复制功能,模式有:master-slaves,master-slaves-slaves,master-master-slaves等可以有多个分层,那么现在我所要说的是master-slaves的模式(其他的模式原理基本都一样),然后再通过mysql官方提供的Mysql-proxy实现读写分离,达到负载均衡的效果。

环境:

  主机:master:192.168.1.109,slave1:192.168.1.110,mysqlProxy:192.168.1.112。(workstation10平台创建虚拟机模拟)

  操作系统:Red Hat Enterprise Linux Server release 5.8

  mysql:mysql-5.5.37-linux2.6-i686.tar.gz

  mysql-proxy:mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz

 

1、安装mysql:

[root@localhost ~]# cd /usr/local  //进入到安装目录

[root@localhost local]# tar -zxvf mysql-5.5.37-linux2.6-i686.tar.gz    //解压mysql二进制包

[root@localhost local]# ln -s mysql-5.5.37-linux2.6-i686 mysql  //解压之后加上链接

[root@localhost local]# groupadd mysql  //增加mysql用户组

[root@localhost local]# useradd -g mysql mysql  //增加mysql用户帐号

[root@localhost local]# cd mysql  //进入安装之后的mysql目录

[root@localhost mysql]# chown -R root:mysql .  //修改文件属组和属主,注意该命令后面有一个点,表示当前目录

[root@localhost mysql]# chown -R mysql:mysql data/  //把data目录的属主改为mysql

[root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf  //拷贝mysql配置文件放在etc目录下并改名为my.cnf

[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld  //拷贝mysql的启动脚本放在/etc/init.d/目录下

[root@localhost mysql]# service mysqld start  //启动mysql

至此mysql安装已经结束,接下来就是mysql的主从配置。(其他两台主机也照此安装mysql)

 

2、配置master:

[root@localhost mysql]# vi /etc/my.cnf  //编辑配置文件

server-id=1  //默认是1,不是的话则改为1

thread_concurrency = 2  //线程并发数(CPU*2)

log-bin=mysql-bin  //打开二进制日志功能

保存退出,重新启动mysql。

登入mysql:

[root@localhost mysql]# mysql -uroot -p  //默认密码空,直接敲回车进入

mysql> grant replication slave on *.* to repl@'192.168.1.%' identified by '123456';

mysql>flush privileges;

mysql>show grants for 'repl'@'192.168.1.%';  //查看授权,有记录说明ok

mysql>show master status/G;  //查看master服务器状态,有二进制日志文件名和记录位置(position)

至此mysql配置完成。

 

3、配置slave

[root@localhost mysql]#vi /etc/my.cnf  //编辑配置文件

server-id=11  //设置与master不一样就行,

thread_concurrency = 2  //线程并发数(CPU*2)

relay-log=mysql-log  //打开中继日志

relay-log-index=mysql-log.index  //设置relay-log-index文件名

保存退出,重新启动mysql。

登入mysql:

[root@localhost mysql]# mysql -uroot -p  //默认密码空,直接敲回车进入

mysql>change master to 

       ->master_host='192.168.1.109',  //master服务器ip

   ->mastet_user='repl',  //用户名

   ->mastet_password='123456',  //密码

   ->master_log_file='mysql-bin.000001',  //master服务器二进制日志名

   ->master_log_pos=107;

mysql>slave start;  //启动slave

mysql> SHOW SLAVE STATUS/G;  //查看slave状态

*************************** 1. row ***************************

             Slave_IO_State:

                Master_Host: 192.168.1.109

                Master_User: repl

                Master_Port: 3306

              Connect_Retry: 60

            Master_Log_File: mysql-bin.000001

        Read_Master_Log_Pos: 4

             Relay_Log_File: mysql-relay-bin.000001

              Relay_Log_Pos: 4

      Relay_Master_Log_File: mysql-bin.000001

           Slave_IO_Running: yes

          Slave_SQL_Running: yes

                             ...omitted...

      Seconds_Behind_Master: NULL

如果 Slave_IO_Running和Slave_SQL_Running显示为yes则配置ok,过程中可能会出现:

Slave I/O: error connecting to master 'repl@192.168.1.109:3306' - retry-time: 60  retries: 86400, Error_code: 2003

引起问题原因是防火墙拦截了,解决办法就是修改防火墙配置,简单直接的办法就是把master服务器的防火墙关掉,执行/etc/init.d/iptables stop命令。

接下来测试,在master中创建一个数据库db_test,查看slave中是是否存在db_test。

至此slave配置结束,其他从服务器按此方式配置。

 

4、配置mysql-proxy,代理服务最好另外部署一台机器,尤其是上线运行后,所以这里测试也是用了单独一台虚拟机,没有部署在master或slave机器上。

 [root@localhost local]# tar -zxvf mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz  //解压

 [root@localhost local]# ln -s  mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit  mysql-proxy  //加一个快捷链接

 [root@localhost local]# groupadd mysql-proxy  //创建用户组

 [root@localhost local]# useradd -g mysql-proxy  mysql-proxy  //创建用户

 [root@localhost local]# cd mysql-proxy  //进入mysql-proxy目录

 [root@localhost mysql-proxy]# chown -R root:mysql-proxy .  //更改目录属主和属组,命令后面有一个点(.)表示当前目录

 [root@localhost mysql-proxy]# vi /etc/profile.d/mysql-proxy.sh  //把mysql的bin目录加到PATH变量中,

 export PATH=$PATH:/usr/local/mysql-proxy/bin

 [root@localhost mysql-proxy]# source /etc/profile   //让配置文件立刻生效

 [root@localhost mysql-proxy]# mysql-proxy --help-all  //查看mysql-proxy命令,出现如下信息:

 <br>

下面我们启动mysql-proxy,做一个简单测试,不过我们先要简单介绍一下mysql-proxy命令。

mysql-proxy 命令

  • --help-all ———— 用于获取全部帮助信息

  • --proxy-address=host:port ———— 代理服务监听的地址和端口

  • --admin-address=host:port ———— 管理模块监听的地址和端口

  • --proxy-backend-addresses=host:port ———— 后端mysql服务器的地址和端口(主服务器)

  • --proxy-read-only-backend-addresses=host:port ———— 后端只读mysql服务器的地址和端口(从服务器)

  • --proxy-lua-script=file ———— 完成mysql代理功能的Lua脚本

  • --daemon ———— 以守护进程模式启动mysql-proxy

  • --defaults-file=/path/to/conf_file_name ———— 默认使用的配置文件路径

  • --log-file=/path/to/log_file_name ———— 日志文件名称

  • --log-level=level ———— 日志级别

  • --log-use-syslog ———— 基于syslog记录日志

  • --user=user_name ———— 运行mysql-proxy进程的用户

[root@localhost mysql-proxy]# mysql-proxy  --daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.1.109:3306" --proxy-read-only-backend-addresses="192.168.1.110:3306"  //启动mysql-proxy[root@localhost mysql-proxy]# tail /var/log/mysql-proxy.log  //查看启动日志

2014-05-10 00:09:22: (critical) plugin proxy 0.8.4 started<br>2014-05-10 00:09:22: (debug) max open file-descriptors = 1024<br>2014-05-10 00:09:22: (message) proxy listening on port :4040<br>2014-05-10 00:09:22: (message) added read/write backend: 192.168.1.109:3306<br>2014-05-10 00:09:22: (message) added read-only backend: 192.168.1.110:3306

[root@localhost mysql-proxy]#netstat -ntulp | grep :4040  //查看监听的端口

tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN      10056/mysql-proxy

现在我们需要在master服务器中创建一个远程登入的mysql账号

master:

mysql> GRANT ALL ON *.* TO root@'192.168.1.%' IDENTIFIED BY '123456'Query OK, 0 rows affected (0.07 sec)mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.04 sec) 在从服务器上做测试:slave:[root@bogon ~]# mysql -uroot -p123456 -h192.168.1.112 --port=4040 这样就连上了Mysql-Proxy服务器了,如果出现错误:ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.112' (113),请修改防火墙配置或关闭。下面我们来实现读写分离,Mysql-Proxy本身不会实现读写分离,主要是依靠 Lua 脚本实现的。[root@localhost mysql-proxy]# killall mysql-proxy  //杀掉mysql-proxy进程[root@localhost mysql-proxy]# netstat -ntlup | grep 4040  //查看进程是否停掉[root@localhost mysql-proxy]# cd share/doc/mysql-proxy/ [root@localhost mysql-proxy]# ls | grep rw-splitting.lua  //查看读写分离脚本,lua语言实现rw-splitting.lua[root@localhost mysql-proxy]# mysql-proxy --daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.1.109:3306" --proxy-read-only-backend-addresses="192.168.1.110:3306" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"[root@localhost mysql-proxy]#在slave 服务器上做测试,ok,完成了,mysql-proxy实现mysql集群的读写分离完成了,这种模式是MySQL集群最为基本的一种模式,也能够实现负载均衡,后续研究MySQL更深层次的集群,一同分享一同进步。^_^  
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何识别和优化MySQL中的慢速查询? (慢查询日志,performance_schema)如何识别和优化MySQL中的慢速查询? (慢查询日志,performance_schema)Apr 10, 2025 am 09:36 AM

要优化MySQL慢查询,需使用slowquerylog和performance_schema:1.启用slowquerylog并设置阈值,记录慢查询;2.利用performance_schema分析查询执行细节,找出性能瓶颈并优化。

MySQL和SQL:开发人员的基本技能MySQL和SQL:开发人员的基本技能Apr 10, 2025 am 09:30 AM

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

描述MySQL异步主奴隶复制过程。描述MySQL异步主奴隶复制过程。Apr 10, 2025 am 09:30 AM

MySQL异步主从复制通过binlog实现数据同步,提升读性能和高可用性。1)主服务器记录变更到binlog;2)从服务器通过I/O线程读取binlog;3)从服务器的SQL线程应用binlog同步数据。

mysql:简单的概念,用于轻松学习mysql:简单的概念,用于轻松学习Apr 10, 2025 am 09:29 AM

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

MySQL:数据库的用户友好介绍MySQL:数据库的用户友好介绍Apr 10, 2025 am 09:27 AM

MySQL的安装和基本操作包括:1.下载并安装MySQL,设置根用户密码;2.使用SQL命令创建数据库和表,如CREATEDATABASE和CREATETABLE;3.执行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.创建索引和存储过程以优化性能和实现复杂逻辑。通过这些步骤,你可以从零开始构建和管理MySQL数据库。

InnoDB缓冲池如何工作,为什么对性能至关重要?InnoDB缓冲池如何工作,为什么对性能至关重要?Apr 09, 2025 am 12:12 AM

InnoDBBufferPool通过将数据和索引页加载到内存中来提升MySQL数据库的性能。1)数据页加载到BufferPool中,减少磁盘I/O。2)脏页被标记并定期刷新到磁盘。3)LRU算法管理数据页淘汰。4)预读机制提前加载可能需要的数据页。

MySQL:初学者的数据管理易用性MySQL:初学者的数据管理易用性Apr 09, 2025 am 12:07 AM

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。

与MySQL中使用索引相比,全表扫描何时可以更快?与MySQL中使用索引相比,全表扫描何时可以更快?Apr 09, 2025 am 12:05 AM

全表扫描在MySQL中可能比使用索引更快,具体情况包括:1)数据量较小时;2)查询返回大量数据时;3)索引列不具备高选择性时;4)复杂查询时。通过分析查询计划、优化索引、避免过度索引和定期维护表,可以在实际应用中做出最优选择。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中