mysql主从,mysql主从同步配置全过程

mysql服务器的主从配置,确实是一件很简单的事情
一准备工作
1、mysql配置文件my.cnf的位置
查找命令: find / -name my.cnf
2、如何启动、停止mysql,找好启动文件
/etc/init.d/mysql restart
/etc/init.d/mysql start
/etc/init.d/mysql stop
二配置步骤
假设有两台机器,已经安装好了mysql(尽量同版本,且两台机器同一网络,可以ping通)
主机A: 192.168.1.100
从机B: 192.168.1.101
可以有多台从机
1、先登录主机 A
mysql>GRANT REPLICATION SLAVE _disibledevent=>
log_bin= /var/log/mysql/mysql-bin.log #确保此文件可写
read-only=0 #主机,读写都可以
binlog-do-db=test #需要备份数据,多个写多行
binlog-do-db=testsync #需要备份数据,多个写多行
binlog-ignore-db=mysql #不需要备份的数据库,多个写多行
3、打开从机B的my.cnf,输入
server-id= 2
log_bin= /var/log/mysql/mysql-bin.log
master-host=192.168.1.100
master-user=backup
master-pass=123456
master-port=3306
master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db =test #只复制某个库
replicate-ignore-db=mysql #不复制某个库
4、对/var/log/mysql/ 是否有mysql目录,如没有新建 mkdir mysql,然后设置可写权限 chmod 777 /var/log/mysql/
5、同步数据库
有多种方法,我说简单的一种,先mysqldump导出主机A的数据test为 test.sql
然后在,从机B上建立数据库test,mysql导入 test.sql到test库中
6、先重启主机A的mysql,/etc/init.d/mysql restart,再重启从机B的mysql,/etc/init.d/mysql restart。
7、验证
在主机A中,mysql>show master status\G;
在从机B中,mysql>show slave status\G;
能看到大致这些内容
File: mysql-bin.000001
Position: 1374
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
可以在主机A中,做一些INSERT, UPDATE, DELETE 操作,看看主机B中,是否已经被修改
三、其它辅助命令
1、为了保护数据在从A导到B的后,数据不发生变动,最好导之前进行锁表操作,导到B主机同步前进行解锁操作
锁表:mysql > FLUSH TABLES WITH READ LOCK;
注意 为了保证FLUSH TABLES语句让读锁定保持有效。(如果退出客户程序,锁被释放)。建立新的SSH连接,然后对主服务器上的数据进行快照。
解锁:mysql > UNLOCK TABLES;
2、从服务器执行同步
mysql>start slave;
mysql>load data from master;
3、验证配置
登录从服务器输入如下命令
mysql> show slave status\G;
会得到类似下面的列表:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
都为yes,则配置正确.
4、附
一些错误信息的处理,主从服务器上的命令,及状态信息。
在从服务器上使用show slave status\G
Slave_IO_Running,为No,
则说明IO_THREAD没有启动,请执行start slave io_thread
Slave_SQL_Running为No
则复制出错,查看Last_error字段排除错误后执行start slave sql_thread
查看Slave_IO_State字段空 //复制没有启动
Connecting to master//没有连接上master
Waiting for master to send event//已经连上
主服务器上的相关命令
show master status
show slave hosts
show logs
show binlog events
purge logs to ‘log_name’
purge logs before ‘date’
reset master(老版本flush master)
从服务器上的相关命令:
slave start
slave stop
SLAVE STOP IO_THREAD //此线程把master段的日志写到本地
SLAVE start IO_THREAD
SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库
SLAVE start SQL_THREAD
reset slave
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息
PURGE MASTER [before 'date'] 删除master端已同步过的日志
几个跟热备有关的mysql命令:(需要在mysql命令行界面或query )
* stop slave #停止同步
* start slave #开始同步,从日志终止的位置开始更新。
* SET SQL_LOG_BIN=0|1 #主机端运行,需要super权限,用来开停日志,随意开停,会造成主机从机数据不一致,造成错误
* SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
* RESET MASTER #主机端运行,清除所有的日志,这条命令就是原来的FLUSH MASTER
* RESET SLAVE #从机运行,清除日志同步位置标志,并重新生成master.info
虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下,
* LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令
需要同步账号有 reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
* LOAD DATA FROM MASTER #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表
比较大,要增加net_read_timeout 和 net_write_timeout的值
* CHANGE MASTER TO master_def_list #在线改变一些主机设置,多个用逗号间隔,比如
CHANGE MASTER TO
MASTER_HOST=’master2.mycompany.com’,
MASTER_USER=’replication’,
MASTER_PASSWORD=’bigs3cret’
* MASTER_POS_WAIT() #从机运行
* SHOW MASTER STATUS #主机运行,看日志导出信息
* SHOW SLAVE HOSTS #主机运行,看连入的从机的情况。
* SHOW SLAVE STATUS (slave)
* SHOW MASTER LOGS (master)
* SHOW BINLOG EVENTS [ IN 'logname' ] [ FROM pos ] [ LIMIT [offset,] rows ]
* PURGE [MASTER] LOGS TO ‘logname’ ; PURGE [MASTER] LOGS BEFORE ‘date’
Tags:  mysql配置 mysql多主从 mysql主从

延伸阅读

最新评论

发表评论