在一台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 cmake

sudo apt-get install libncurses5-dev 

sudo apt-get install build-essential

build-essential:作用是提供编译程序必须软件包的列表信息

 也就是说 编译程序有了这个软件包

 它才知道 头文件在哪 才知道库函数在哪

 还会下载依赖的软件包最后才组成一个开发环境

以下是mysql的安装路径、主配置文件、数据文件,要与之前的区分开来

sudo mkdir /mnt/mysql

sudo mkdir /mnt/mysql/etc

sudo mkdir /mnt/mysql/data

解压

tar xf mysql-5.5.43.tar.gz

cd 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/data

make

sudo 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/mysql2

chown -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/mysql2

Basedr=

Datadir=

mysql读写分离_第1张图片

 

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

mysql读写分离_第2张图片

 

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

mysql读写分离_第3张图片

 

修改它的配置文件

Sudo vim /mnt/mysql/etc/my.cnf

 

mysql读写分离_第4张图片

 

 

 

 

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

mysql读写分离_第5张图片

 

这里不得不说一下,还有mysql的错误日志,也得给它指一个路径,在配置文件中输入以下内容就好

log_error = /var/log/mysql/error2.log

最后启动mysql2

Sudo /etc/init.d/mysql2 start

主从配置

 

 

用apt-get装的那台mysql的主配置文件在/etc/mysql/my.cnf

Sudo vim /etc/mysql/my.cnf  ,加入以下内容:

[mysqld]

server-id=1

log-bin=mysql-binlog

log-slave-updates=true

log-slave-updates这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器B是服务器A的从服务器,同时还作为服务器C的主服务器,那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作

Sudo /etc/init.d/mysql restart

登陆master

Mysql -uroot -p -h 127.0.0.1 -P3306

grant 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 -P3306

mysql -u root -p  -h127.0.0.1 -P3307< /root/alldbbackup.sql

修改MySQL配置文件

[root@localhost ~]# vim /mnt/mysql/etc/my.cnf

server-id       = 2

relay-log=relay-log-bin 

relay-log-index=slave-relay-bin.index

relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器

Sudo /etc/init.d/mysql2 restart

Mysql -u root -p -h 127.0.0.1 -P3307

Stop slave

CHANGE MASTER TO

MASTER_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 slave

show slave status\G;

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

因之前安装toncat时,安装过jdk,所以在这里只需要设置环境变量:

Vim /etc/profile

export JAVA_HOME=/usr/local/java

export 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/amoeba

amoeba 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

mysql读写分离_第6张图片

 

 

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

 

mysql读写分离_第7张图片

 

mysql读写分离_第8张图片

 

 

 

编辑dbServers.xml配置文件

[root@localhost ~]# cp /usr/local/amoeba/conf/dbServers.xml{,.bak}

[root@localhost ~]# vim /usr/local/amoeba/conf/dbServers.xml

 

 

mysql读写分离_第9张图片

 

 

 

 

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

 

mysql读写分离_第10张图片

 

mysql读写分离_第11张图片

 

 

登陆amoeba服务器

mysql -uamoeba -p -h 192.168.1.128 -P8066