在生产中,为了节省空间,可能多台MySQL服务器的slave端都在同一主机上,那就需要对slave端进行一些特殊的配置才行。以下 是我在虚拟机上进行的模拟步骤。
# ln -sv /usr/local/mysql/include /usr/include/mysql


第一步:装虚拟机
三台虚拟机的操作系统都是CentOS 5.8(64位)、内存均分配512M,IP地址分配为
三台虚拟机的操作系统都是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
# 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/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的状态:

slave55的状态:

如果Slave_IO_Running和Slave_SQL_Running均为Yes,则表示slave状态正常。
本文介绍了如何在同一台机器上配置多个MySQL从库,包括安装MySQL、配置多实例数据库、搭建主从同步,详细阐述了每个步骤及配置文件的修改,确保多个从库能正确连接到不同的主库。
418

被折叠的 条评论
为什么被折叠?



