在同一MySQL机器上做多台MySQL主机的slave端

本文介绍了如何在同一台机器上配置多个MySQL从库,包括安装MySQL、配置多实例数据库、搭建主从同步,详细阐述了每个步骤及配置文件的修改,确保多个从库能正确连接到不同的主库。
在生产中,为了节省空间,可能多台MySQL服务器的slave端都在同一主机上,那就需要对slave端进行一些特殊的配置才行。以下 是我在虚拟机上进行的模拟步骤。

第一步:装虚拟机
三台虚拟机的操作系统都是CentOS 5.8(64位)、内存均分配512M,IP地址分配为
主库A:128.192.0.44 
主库B:128.192.0.55
从库C:128.192.0.88
装完第一台后,直接用Vmware的clone功能,能很方便的把第二台和第三台复制出来,具体步骤在此不做叙述。

第二步:装数据库
三台机器的MySQL数据库版本均为5.5.27。主机和从机的安装过程基本相同。主机具体安装过程如下:
# groupadd mysql
# useradd -r -g mysql mysql
# cd 
# tar -zxvf mysql-5.5.27-linux2.6-x86_64.tar.gz -C /usr/local/
# cd /usr/local
# ln -s /usr/local/mysql-5.5.27-linux2.6-x86_64 /usr/local/mysql
# cd mysql
# chown -R mysql:mysql .
# scripts/mysql_install_db --user=mysql --datadir=/data
# chown -R root .
# chown -R mysql:mysql /data
 拷贝MySQL的配置文件
# cp support-files/my-medium.cnf /etc/my.cnf
拷贝MySQL的启动文件,并加入到linux的开机启动列表中
cp support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
 添加库文件
添加:/usr/local/mysql/lib  --> 保存退出, ldconfig  (-v  显示执行结果) 
 # vi /etc/ld.so.conf.d/mysql.conf
 添加头文件 
  # ln -sv /usr/local/mysql/include /usr/include/mysql
 将MySQL的命令的路径加入到PATH中 
# vi /etc/.bash_profile
 
添加: PATH=$PATH:/usr/local/mysql/bin (建议添加到"export"行之上)
 # source /etc/profile
 添加MAN路径 
 # vi /etc/man.config
 
添加:MANPATH  /usr/local/mysql/man

  # vi /etc/my.cnf
在[mysqld]内容里填入一行
datadir = /data
  启动MySQL服务器
# service mysqld start

第三步:在从机上配置多实例数据库
虽然从机的数据库安装过程和主机基本相同,但是因为从机是多实例启动,所以配置上跟主机稍有不同。两个实例对应的目录分别为/data/slave44和/data/slave55,所以mysql_install_db需要运行两次。
 # cd /usr/local/mysql/
 # scripts/mysql_install_db --user=mysql --datadir=/data/slave44
# scripts/mysql_install_db --user=mysql --datadir=/data/slave55
其余步骤照旧,最后修改/etc/my.cnf时有很大不同。关注一下标红的部分
[client] 
port = 3306 
socket = /tmp/mysql.sock 
[mysqld_multi] 
mysqld = /usr/local/mysql/bin/mysqld_safe 
mysqladmin = /usr/local/mysql/bin/mysqladmin 
[mysqld1
port = 3306 
socket = /tmp/mysql1.sock 
datadir = /data/slave44 
pid-file = /data/slave44/slave44.pid 
skip-external-locking 
key_buffer_size = 16M 
max_allowed_packet = 1M 
table_open_cache = 64 
sort_buffer_size = 512K 
net_buffer_length = 8K 
read_buffer_size = 256K 
read_rnd_buffer_size = 512K 
myisam_sort_buffer_size = 8M 
log-bin=mysql-bin 
binlog_format=mixed 
server-id = 2 
[mysqld2
port = 3307 
socket = /tmp/mysql2.sock 
datadir = /data/slave55 
pid-file = /data/slave55/slave55.pid 
skip-external-locking 
key_buffer_size = 16M 
max_allowed_packet = 1M 
table_open_cache = 64 
sort_buffer_size = 512K 
net_buffer_length = 8K 
read_buffer_size = 256K 
read_rnd_buffer_size = 512K 
myisam_sort_buffer_size = 8M 
server-id = 2

两个实例的port、socket、datadir、pid-file的设置都不一样。启动和关闭数据库的方法也不一样,需要用mysqld_multi来启动和关闭。
 启动实例1和实例2
# mysqld_multi --defaults-extra-file=/etc/my.cnf start 1
# mysqld_multi --defaults-extra-file=/etc/my.cnf start 2
关闭实例1和实例2
# mysqld_multi --defaults-extra-file=/etc/my.cnf stop 1
# mysqld_multi --defaults-extra-file=/etc/my.cnf stop 2
 
用客户端进行登录的方式也不一样。
# mysql -uroot -p  --port=3306 --socket=/tmp/mysql1.sock
# mysql -uroot -p  --port=3307 --socket=/tmp/mysql2.sock

第四步:搭建主从 
主机步骤(两台主机上的步骤都一样):
先修改my.cnf里的
[mysqld] server-id=1
在主机上创建一个在从机上进行复制的账号
mysql > grant replication slave on *.* to 'repli'@'128.192.0.88' identified by 'slave';
 锁定表
 mysql > flush tables with read lock;
 记录下File 和Position两项内容
 mysql > show master status;
+-----------------------+-----------+-------------------+------------------+
| File                        | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------------+-----------+-------------------+------------------+
| mysql-bin.000004 |  107        |                          |                       |
+-----------------------+-----------+-------------------+------------------+
1 row in set (0.02 sec)
关闭mysql服务
# service mysqld stop;
把现有数据全部同步到slave端的datadir。也可以考虑用mysqldump来进行复制。
# rsync -av /data/* root@128.192.0.88:/data/slave44/
启动master端
# service mysqld start;
对表解锁
mysql > unlock tables;

从机步骤:
先修改my.cnf里的
[mysqld1]  
server-id=2
[mysqld2]
server-id=2
 启动从机的slave,并进行配置。(此处只配置slave44,slave55的配置方法一样)
# mysqld_multi --defaults-extra-file=/etc/my.cnf start 1
 # mysql -uroot -p  --port=3306 --socket=/tmp/mysql1.sock
 mysql > start slave;
 mysql> CHANGE MASTER TO
  -> MASTER_HOST='128.192.0.44',
  -> MASTER_USER='repli',
  -> MASTER_PASSWORD='slave',
  -> MASTER_LOG_FILE='mysql-bin.000004',
  -> MASTER_LOG_POS=107;
其中各个选项分别代表master的host、之前创建的用于复制的账号、密码、之前在master上'show master status'保存的File、Position
如果设置报错,先查看参数是否输入有误,如果无误,可以参照如下解决:
mysql > stop slave;
mysql > reset slave;
再次输入设置即可。

最后查看slave的状态
slave44的状态:
在同一MySQL机器上做多台MySQL主机的slave端 - liujie.8181 - liujie.8181 的博客

slave55的状态:
在同一MySQL机器上做多台MySQL主机的slave端 - liujie.8181 - liujie.8181 的博客
如果Slave_IO_Running和Slave_SQL_Running均为Yes,则表示slave状态正常。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值