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 ;”,