您的位置:首页 > 数据库 > MySQL

mysql读写分离

2015-11-10 14:43 453 查看
在一台ubuntu上安装2个mysql服务器

并做主从与读写分离

实验环境:ubuntu 14.4.0 IP:192.168.1.128 mysql版本:5.5.43因ubuntu之前安装过mysql(apt-get install装的),考虑到这2个mysql应该把主配置文件my.cnf 、进程文件pid、socket文件、区分开来,所以第二台mysql选择用源码包安装:先安装源码包mysql5.5.43所依赖的关系包,如下sudo apt-get install cmakesudo apt-get install libncurses5-dev sudo apt-get install build-essentialbuild-essential:作用是提供编译程序必须软件包的列表信息 也就是说 编译程序有了这个软件包 它才知道 头文件在哪 才知道库函数在哪 还会下载依赖的软件包最后才组成一个开发环境以下是mysql的安装路径、主配置文件、数据文件,要与之前的区分开来sudo mkdir /mnt/mysqlsudo mkdir /mnt/mysql/etcsudo mkdir /mnt/mysql/data解压tar xf mysql-5.5.43.tar.gzcd mysql-5.5.43/cmake -DCMAKE_INSTALL_PREFIX=/mnt/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/mnt/mysql/etc -DMYSQL_TCP_PORT=3307 -DMYSQL_UNIX_ADDR=/mnt/mysql/data/mysqld.sock -DMYSQL_DATADIR=/mnt/mysql/datamakesudo make install(如果是普通用户,这里切记要加sudo,否则会报错)cd support-files/sudo cp my-medium.cnf /mnt/mysql/etc/my.cnf (拷贝一份默认文件到它的主配置文件下)sudo cp mysql.server /etc/init.d/mysql2 (mysql的启动脚本,原先已存在mysql,所以在这再起一个名mysql2)sudo chmod +x /etc/init.d/mysql2chown -R mysql:mysql /mnt/mysql/Sudo /mnt/mysql/scripts/mysql_install_db --basedir=/mnt/mysql/ --datadir=/mnt/mysql/data --user=mysql修改它的启动脚本sudo vim /etc/init.d/mysql2Basedr=Datadir=


Conf=/mnt/mysql/etc/my.cnf(主配置文件路径)


生成的pid,默认为`hostname`.pid


修改它的配置文件Sudo vim /mnt/mysql/etc/my.cnf


修改完以后启动mysql,通过ps aux|grep mysqld 发现 --socket = /var/run/mysqld/mysqld.socket,这是为什么呢,即便改变配置文件也无济于事,最后在配置文件加入以下内容才改变(~~0.0~~)


这里不得不说一下,还有mysql的错误日志,也得给它指一个路径,在配置文件中输入以下内容就好log_error = /var/log/mysql/error2.log最后启动mysql2Sudo /etc/init.d/mysql2 start

主从配置

用apt-get装的那台mysql的主配置文件在/etc/mysql/my.cnfSudo vim /etc/mysql/my.cnf ,加入以下内容:[mysqld]server-id=1log-bin=mysql-binloglog-slave-updates=truelog-slave-updates这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器B是服务器A的从服务器,同时还作为服务器C的主服务器,那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作Sudo /etc/init.d/mysql restart登陆masterMysql -uroot -p -h 127.0.0.1 -P3306grant replication slave on *.* to 'slave'@'127.0.0.1' identified by '123456';flush privileges;show master status;记录下File和Position的值mysqldump -u root -p --all-databases > /root/alldbbackup.sql在 MySQL Slave 上的配置 从库连接主库进行测试,如果连接成功说明主库配置成功[root@localhost ~]# mysql -u slave -p123456 -h 127.0.0.1 -P3306mysql -u root -p -h127.0.0.1 -P3307< /root/alldbbackup.sql修改MySQL配置文件[root@localhost ~]# vim /mnt/mysql/etc/my.cnfserver-id = 2relay-log=relay-log-bin relay-log-index=slave-relay-bin.indexrelay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器Sudo /etc/init.d/mysql2 restartMysql -u root -p -h 127.0.0.1 -P3307Stop slaveCHANGE MASTER TOMASTER_HOST='127.0.0.1',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-binlog.000028',MASTER_LOG_POS=12050661, MASTER_PORT=3306;Start slaveshow slave status\G;

使用amoeba在以上基础上做读写分离

因之前安装toncat时,安装过jdk,所以在这里只需要设置环境变量:Vim /etc/profileexport JAVA_HOME=/usr/local/javaexport JRE_HOME=/usr/local/java/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH Source /etc/profile安装并配置Amoeba[root@localhost ~]# mkdir /usr/local/amoeba[root@localhost ~]# tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba[root@localhost ~]# chmod -R 755 /usr/local/amoeba[root@localhost ~]# /usr/local/amoeba/bin/amoebaamoeba start|stop //显示此内容说明Amoeba安装成功.配置Amoeba读写分离,两个Slave读负载均衡Master,Slave1,Slave2中配置放权给Amoeba访问grant all on *.* to 'amoeba'@'127.0.0.1' identified by 'amoeba';flush privileges; 编辑amoeba.xml配置文件[root@localhost ~]# cp /usr/local/amoeba/conf/amoeba.xml{,.bak}[root@localhost ~]# vim /usr/local/amoeba/conf/amoeba.xml


上边的IP127.0.0.1是供外部客户端连接的,可以改为192.168.1.128





编辑dbServers.xml配置文件[root@localhost ~]# cp /usr/local/amoeba/conf/dbServers.xml{,.bak}[root@localhost ~]# vim /usr/local/amoeba/conf/dbServers.xml


这个ip是mysql自身的ip就要写成127.0.0.1





登陆amoeba服务器mysql -uamoeba -p -h 192.168.1.128 -P8066
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: