mysql服务器的主从配置,这样可以实现读写分离,也可以在主库挂掉后从备用库中恢复
需要两台机器,安装mysql,两台机器要在相通的局域网内
主机A: 192.168.1.100
从机B:192.168.1.101
可以有多台从机
1、先登录主机 A
mysql>GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.1.101' IDENTIFIED BY '123456';
赋予从机权限,有多台丛机,就执行多次
2、 打开主机A的my.cnf,输入
server-id=1 #主机标示,整数 log_bin=mysql-bin #确保此文件可写 read-only=0 #主机,读写都可以 binlog-do-db=test #需要备份数据,多个写多行 binlog-ignore-db=mysql #不需要备份的数据库,多个写多行 binlog-ignore-db=information_schema binlog-ignore-db=performance_schema 扩展配置 log-slave-updates=1 #这个参数一定要加上,否则不会给更新的记录些到二进制文件 里 slave-skip-errors=1 #是跳过错误,继续执行复制操作(可选)
3、设置表读锁
mysql>flush tables with read lock;
备份主库需要同步的数据库
mysqldump - u root -p test > test.sql
mysql>unlock tables; #解锁
最后导入到从库
4、打开从机B的my.cnf,输入
server-id = 2 log_bin = mysql-bin replicate-do-db =test #只复制某个库 replicate-ignore-db=mysql #不复制某个库 replicate-ignore-db=information_schema replicate-ignore-db=performance_schema #然后还需要进入服务器做些更改 mysql>change master to master_host='192.168.1.100',master_user='backup',master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=107; #此处的master_log_pos查看主机show master status \G状态下的文件偏移量Position
5、验证
在主机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中,是否已经被修改
常见问题:
mysql Slave_IO_Running:NO
解决方法:
mysql> change master to Master_Log_File='mysql-bin.000001',Master_Log_Pos=98; #master_log_pos查看主机show master status \G状态下的Position
Slave_SQL_Running:No
一般是事务回滚造成的:
mysql> slave stop; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> slave start;