主DB:192.168.1.101
从DB1:192.168.1.102
从DB2:192.168.1.103(准备在线添加做为从机的mysql数据库)
数据库版本:mysql 5.1.61(select version())
服务器版本:red hat linux 6
注:目前主铅芹从正常(show slave statusG),同步的数据缓弯库为 login
3台DB server的备份软件(xtrbackup)都已经安装完成
同步的表为innodb引擎的表,不然用xtrabackup还是会锁表
假设环境为:现在login库下的表a,备份的时候插入数据,最终行为5418272
注:思路是备份,可是用mysqldump备份会扰激闷锁表,如果数据量很大的话,线上环境肯定不允许使用mysqldump备份!
首先,我们大概罗列一下主从复制的基本步骤,(MySQL主从首先需要在各自服务器配置好)。1. 复制数据库。
mysqldump --master-data --single-transaction -R --databases [db_name] | gzip -9 - | pv >all-db-with-master-data.sql.gz
注意:innodb用 –single-transaction, myisam需要用 –lock-all-tables。
2. 复制,导入数据。
pv <all-db-with-master-data.sql.gz | zcat | mysql
3. 启动slave数据库。
slave start
注意:切换到主的语句已经在导出哪竖穗的sql语句里面了,注意查看。change master to master_log_file=’(binlog name in relay_master_log_file)’, master_log_pos=(exec_master_log_pos number)。
那么,在现有的主从复制结构中,如何增加一个新的数据库进去?比如我们要增加一个数据库在master服务器上,比如,名为newdb的数据库。
具体 *** 作如下:
1. 从服务上,停掉slave数据库。
stop slave
2. 主服务器上,导出新数据库。
mysqldump --master-data --single-transaction -R --databases newdb >newdb.sql
3. 主服务器上,修改my.cnf文件,添加新库到binlog-do-db参数,重启mysql。
4. 在导出的newdb.sql里面查找当前的日志文件以及位置(change master to …)
然后让slave服务器执行到这个位置。
start slave until MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=1222220
其中MASTER_LOG_FILE以及MASTER_LOG_POS在导出的数据库newdb.sql顶部位置查纤亮找。
4. 导入新库到从服务器上。
mysql <newdb.sql
5. start slave
其中比较重要的是在主服务器上导出新库时的日志位置(position A),这个点很重要,以这个点做为分界线,导入新库。
这种方法也同样适用于某个数据库或者某李卜个数据表不同步的情况,比如主从数据库有一个表由于某些原因数据不一致,那么上面的方法只需要去掉重启数据库一步,其他的 *** 作基本
两台机器,192.168.162.128(主) 192.168.162.130(从)
配置主的配置文件
vi /etc/my.cnf
创建复制用户并授权给从服务器
grant replication slave on *.* to 'rpl'@'192.168.162.130' identified by '123456'
重启主服务器的MySQL /etc/init.d/mysqld restart
查看master信息: 进入MySQL show master status \G
修改从库配置文件
vi /etc/my.cnf
重启从服务器MySQL,进入MySQL
指定主服务器IP等信息
change master to master_host='192.168.162.128 ',master_user='rpl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=647
启动slave :start slave
查看slave状态:show slave status \G
报错Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDsthese UUIDs must be different for replication to work
意思是主和败则拿从必须都察搭要有不同的uuid,我们分别去查看下主从的uuid
主:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312
查看从库uuid 从库uuid:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312
可以看出是真的一样,原因在于 我是先安装了一个虚拟机并装好MySQL,后面有复制了一遍,作为从服务器,所以导致了这个UUID是一样的。
接下来就是解决这个UUID问题,将从库上的auto.cnf 备份下。然后重启从库。再看下从库的UUID
[auto]
server-uuid=2e9c834a-1eb2-11e7-864b-000c2928472e
再次查看从库状态
从库状态正常了
11.测试主从是否正常
主库上创建一个测试库,test :create database test
创建测试表:
create table test.test(
id int,
username varchar(10)
)ENGINE='盯灶innodb'
12.查看从库:
正常,说明主从搭建成功
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)