最近公司接触mysql,需要搭建主从复制结构。 假设主库192.168.1.13,备库192.168.1.14.
2个库都已经安装好mysql verson: 5.6.22 Debian 3.2.65
1.首先要把主库上相应的数据库备份出来,备库建立对应的数据库名,并source进去。
mysqldump -uroot -p test >test_name_1214.sql
备库创建同名数据库 create database `test` default character set utf8;
这里尤其要注意2个库的字符集一定要一样,不一样要修改:alter database test default character set utf8;
2. 在主库和备库的配置文件中加入参数:
/etc/my.cnf
主库:
log-bin=mysql-bi
server-id=1
备库:
log-bin=mysql-bin
server-id=2
server-id参数默认是1 ,这里有个要求是 主库和备库的server-id不能一样。
3.重启2台机器的mysqld服务
/etc/init.d/mysql restart
4.在主库上增加一个复制账户:
grant replication slave on *.* to repl@'192.168.1.%' identified by 'repl.123';
repl即为复制同步账户。
5.在主库上查询log日志和pos,记录文件名和位置
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 120 | | |
+------------------+----------+--------------+------------------+
6.在从服务器上配置复制参数:
change master to master_host='192.168.1.13',master_user='repl',master_password='repl.123',master_log_file='mysql-bin.000005',master_log_pos=120;
7.查看从服务器上的状态:
mysql> show slave status\G
注意 Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
至此算是结束。
简述在实际中遇到报错:
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids
说server-id 主从库一样,都是1,在数据库里查询了下一下,确实一样,那么证明my.cnf里的配置没有生效。
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0.00 sec)
关闭slave ,set global server_id=2 ,然后重启slave。再看就正常。
但是默认读取配置文件的流程是:
/etc/my.cnf、datadir/my.cnf,USER_HOME/my.cnf。
find / -name "my.cnf" 发现 /usr/local/mysql也有my.cnf ,删除之 ,之后再无报错。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PS: 第二种报错,报“master and slave has equal MySQL server UUIDs”
两个server的uuid想重复了,就是数据目录下的auto.cnf 这个文件里的东西重复了,可以删除这个文件,重启,报错解决。