- 原理
mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B;主从复制就是
B跟着A学,A做什么,B就做什么。那么B怎么同步A的动作呢?现在A有一个日志功能,把自己所做的增删改查的动作全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制。
- 配置
1.首先修改mysql的配置文件,使其支持二进制日志功能。
打开主服务器的mysql配置文件:my.cnf(linux)/my.ini(windows)
代码:# vi /etc/my.cnf
加入如下三行代码:
[mysqld]
log-bin=mysql-bin
server-id=226
binlog_checksum=none
参数解释:log-bin=mysql-bin //将mysql二进制日志取名为mysql-bin
binlog_checksum=none //不对二进制检查
server-id=101 //为服务器设置一个独一无二的id便于区分,建议使用ip地址的最后一位充当server-id
配置完成,:wq 保存,重启mysql
2.重启mysql命令:# service mysqld restart
3.同样的,进入从服务器,配置从服务器的my.cnf,重复步骤1即可,
[mysqld]
log-bin=mysql-bin
server-id=222
binlog_checksum=none
唯一的区别是,server-id要改成从服务器的ip尾位,即server-id=105;其他两项是一样的,保存,并重启mySQL;
4. 在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。
进入主服务器的mysql命令行:
# mysql -u root -p root
# CREATE USER 'slave'@'%' IDENTIFIED BY '123';
#grant REPLICATION SLAVE on *.* to 'slave'@'%';
# alter user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123';
# flush privileges;
5.查看主服务器BIN日志的信息(执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变).
#show master status;
6. 设置从服务器
进入从服务器mysql命令行: # mysql -u root –proot
关闭slave:#stop slave;
设置访问master的配置:change master to master_host='114.115.134.108',master_user='slave',master_password='123', master_log_file='mysql-bin.000009',master_log_pos=12756;
参数解释: MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置
7.先在从服务器配置完成,
启动从服务器slave :#start slave;
查看是否配置成功:#show slave status;
上面两项均为yes,说明配置成功,否则,请重复前面的步骤。即,重新启动主服务器,查看bin日志的名称和记录的位置;关闭从服务器slave,配置连接主服务器信息,启动slave,查看是否两项全都启动
注:遇到的问题
问题解决:UUID由于克隆导致两台服务器一致。
可以先将克隆机上的auto.cnf文件删除
find / -name auto.cnf 找到对应的路径删除
重启MySQL服务
- 验证
- 主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:
#create database hi_db;
# use hi_db;
# create table hi_tb(id int(3),name char(10));
# insert into hi_tb values(001,'bobu') ;
# show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hi_db |
| mysql |
| test |
+--------------------+
2. 从服务器Mysql查询:
+--------------------+
| Database |
+--------------------+
| information_schema |
| hi_db | //I'M here,大家看到了吧
| mysql |
| test |