在一台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=
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
最后启动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;
因之前安装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
上边的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