Linux 下MySQL 互为主从设置
MySql互为主从复制,其中的一台发生变化,另外一台也马上发生变化,并且都能向外提供服务。 这就比使用主从复制具有更好的性能。
server1:192.168.1.10
server2: 192.168.1.20
1.创建用户并授权
server1:
mysql -u root -p
输入mysql的root密码
mysql> GRANT ALL PRIVILEGES ON *.* TO 'SLAVEROOT'@'192.168.1.20' IDENTIFIED BY 'SLAVEROOT';
server2:
mysql -u root -p
输入mysql的root密码
mysql> GRANT ALL PRIVILEGES ON *.* TO 'SLAVEROOT'@'192.168.1.10' IDENTIFIED BY 'SLAVEROOT';
2.修改Mysql的主配置文件
配置文件一般放在/etc/my.cnf这个位置,实际就根据安装的具体情况了;
server1:
[mysqld]
server-id = 10
log-bin = mysql-bin
replicate-do-db = 数据库名 //需要同步的数据库
auto-increment-increment = 2 //每次增长2
auto-increment-offset = 1 //设置自动增长的字段的偏移量,即初始值为1启动Mysql服务:
修改完成过后重启:
# service mysqld restart
军哥LNMP mysql管理方法:
/etc/init.d/mysql {start|stop|restart|reload|force-reload|status}
server2:
[mysqld]
server-id = 20
log-bin = mysql-bin
replicate-do-db = 数据库名 //需要同步的数据库
auto-increment-increment = 2 //每次增长2
auto-increment-offset = 2 //设置自动增长的字段的偏移量,即初始值为2
启动Mysql服务:
修改完成过后重启:
# service mysqld restart
军哥LNMP mysql管理方法:
/etc/init.d/mysql {start|stop|restart|reload|force-reload|status}
注:二都只有server-id不同和 auto-increment- offset不同
auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2。
如果是三台服务器,每一台auto-increment-increment后面设为3,偏移量,初始值也就设为了1,2,3;
4.为了让两个数据库一样,我们备份其中一个数据库,然后在另一个数据库上恢
复,这样是两个数据库一开始都是一样的。
在server1上操作:
# mysqldump --databases 数据库名 > /tmp/数据库名.sql
在server2上操作:
创建一个与上面同名的空数据库
# mysql
> CREATE DATABASE 数据库名;
>\q
# scp 192.168.1.108:/tmp/数据库名.sql ./
# mysql -uroot -p 数据库名 < /tmp/数据库名.sql
5.然后两个服务器相互通告二进制日志的位置并启动复制功能:
在server1上:
mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.20',
MASTER_USER='SLAVEROOT',
MASTER_PASSWORD='SLAVEROOT';
mysql > START SLAVE;
在server2上:
mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='SLAVEROOT',
MASTER_PASSWORD='SLAVEROOT';
mysql > START SLAVE;
6.查看并验证是否成功
mysql > SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两行显示为这样就代表成功了,在使用中可能用到哪些管理命令呢?做一下记录
附:
1.同步管理
开始同步
mysql> START SLAVE;
停止同步
mysql> STOP SLAVE;
2.删除同步账号
mysql>use mysql;
mysql>delete from user where user='SLAVEROOT' and host='你的对应IP地址';
3.清除同步信息
首先需要停止同步,然后使用以下代码:
mysql> reset slave all;
4.如果日志文件太多,或者过大需要清理
首先确认哪个数据文件是正在使用的
mysql>show master status\G ;
mysql>show slave status\G ;
或者查看当前的日志文件
mysql>show binary logs;
然后删除现在使用日志之前的日志:
mysql>PURGE MASTER LOGS TO'mysql-bin.000016';
或者设置日志过期时间:
mysql> set global expire_logs_days = 30;
5.在复制的时候报错
Last_SQL_Errno: 1146
解决:
set global sql_slave_skip_counter=20;
如果一条解决不了可以多复制几条
然后:
stop slave;
start slave;
或者:
在从服务器上设置忽略该错.
在my.cnf文件中添加“slave-skip-errors = 1146 ;
”,
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。