mysql主从数据库配置。
首先,来看mysql数据库的单向备份。
环境:
主数据库:
192.168.2.101
从数据库:
192.168.2.108
一、主数据库配置:
vi /etc/my.cnf(Linux) my.ini(windows)
复制代码 代码示例:
[mysqld]
log-bin=mysql-bin
server-id=1
binlog-do-db=hyg
binlog-ignore-db=mysql,test
log-slave-updates
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
二、添加一个用来做主从热备份的特殊mysql账号 用户名:slave 密码:123456
复制代码 代码示例:
mysql> grant replication slave on *.* to 'slave'@'192.168.2.108' identified by '123456';
三、主从数据库同步(前提主数据库不能进行任何操作,或者给主数据库加锁)
进行数据传输将主数据库内容s到从数据库(确保两边数据一模一样!)
注:由于没有锁定主服务器,这里记录的主服务器二进制日志position值可能会大于做mysqldump时的值,这将导致从服务器丢失在此期间的更 新。如果可以保证在此期间主服务器不会出现创建新表的更新,那么丢失的影响不大;否则,将导致从服务器复制线程失败,这时必须在做mysqldump时锁 定主服务器。
数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK ;
取消主数据库锁定mysql>UNLOCK TABLES;
四、启动主数据库:
复制代码 代码示例:
mysql -uroot -p123456
mysql> show master status;
记得出来的那两项数据:
file 和postion 的值
四、配置从数据库
vi /etc/my.cnf
复制代码 代码示例:
[mysqld]
server-id=2
master-host=192.168.2.101
master-port=3306
master-user=slave
master-password=123456
master-connect-retry=60
单向成功后的,新增第二次作为主的配置
log-bin= mysql-bin
binlog-do-db=hyg
binlog-ignore-db=mysql
log-slave-updates
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=2
启动从数据库:
复制代码 代码示例:
mysql -uroot -p123456
mysql> stop slave ;
mysql> change master to
master_host='192.168.1.102',
master_user='slave',
master_password='123456',
master_port= 3306,
master_log_file='mysql-bin.000030', #上面标红的那个,必须一致或者比上面的数字小
master_log_pos=98; #上面标红的那个,必须一致
mysql> slave start;
验证是否成功:
mysql> show slave status ;
如能看到:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
则证明配置成功。
注意:
请检查下mysql的配置文件,看是不是还有server-id=1之类的,防止被后面的重新覆盖。
##---------------
mysql的双向备份
在单向备份的基础上,再次做一次主从的反过来的配置即可,
一、添加一个用来做主从热备份的特殊mysql账号 用户名:slave 密码:123456
复制代码 代码示例:
mysql -uroot -p123456
mysql> grant replication slave on *.* to 'slave'@'192.168.2.101' identified by '123456';
二、修改101和108配置
例如101服务器的my.cnf:
复制代码 代码示例:
[mysqld]
log-bin=mysql-bin
server-id=1
binlog-do-db=hyg
binlog-ignore-db=mysql,test
log-slave-updates
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
master-host=192.168.2.108
master-port=3306
master-user=slave
master-password=123456
master-connect-retry=60
108服务器的my.cnf
复制代码 代码示例:
server-id=2
master-host=192.168.2.101
master-port=3306
master-user=slave
master-password=123456
master-connect-retry=60
单向成功后的,新增第二次作为主的配置
log-bin= mysql-bin
binlog-do-db=hyg
binlog-ignore-db=mysql
log-slave-updates
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=2
配置好后,可能根据需要得再执行:
101服务器上运行,复制代码 代码示例:
mysql> stop slave ;
mysql> change master to
master_host='192.168.2.108',
master_user='slave',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=106;
mysql> start slave ;
mysql> show slave status ;
至此,mysql主从配置全部完成。
4、其他命令
1、查看复制进度
需要在主库上运行
mysql>show processlist \G;
2、主服务器上的相关命令:
show processlist;
show master status
show slave hosts
show {master|binary} logs
show binlog events
purge {master|binary} logs to 'log_name'
purge {master|binary} logs before 'date'
reset master(老版本flush master)
set sql_log_bin={0|1}
3、从服务器上的相关命令:
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端已同步过的日志