一、首先是主数据库。
1.在 /etc/my.cnf 的[mysqld]节点内,新加
server-id=222
log-bin=mysql-bin
binlog-do-db=plan-dev #需同步的数据库名
binlog-ignore-db=mysql #不同步的数据库名
如果没有my.cnf文件,就创建一个。
可以 vim /etc/my.cnf 进入insert模式:
[mysqld]
server-id=222
log-bin=mysql-bin
binlog-do-db=szair-plan-dev
binlog-ignore-db=mysql
Esc退出,:wq 回车。
2.授权账号,让从数据库可以进行复制。
由于mysql8.0 的改动比较大,以往的mysql命令已经失效:
grant replication slave on *.* to 'testuser'@'192.168.1.102' identified by '12345678';
这种语句执行会失败。
采用以下方式:
mysql -u root -p密码
CREATE USER 'rootslave'@'从服务器ip地址' IDENTIFIED WITH mysql_native_password BY 'root123';
grant replication slave on *.* to 'rootslave'@'从服务器IP地址'
分开执行,重启下mysql
/etc/init.d/mysql.server restart
再 mysql -u root -p密码,进入mysql,看下master状态
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000003 | 155 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
记下binlog.000003和155。
二、接着是从数据库
1.同样在 /etc/my.cnf 里加入
[mysqld]
server-id=223
log-bin=mysql-bin
replicate-do-db=plan-dev
replicate-ignore-db=mysql
2.
/etc/init.d/mysql.server restart
mysql -uroot -p
mysql>stop slave;
mysql> change master to master_host='主数服务器IP',master_user='rootslave',master_password='root123',master_log_file='binlog.000003',master_log_pos=155;
mysql> start slave; #开启从库 (stop slave:关闭从库)
mysql> show slave status \G;
当slave 状态出现:
Relay_Master_Log_File: binlog.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
则成功。
如果出现Slave_IO_Running: connecting 这种状态则失败了,查看下错误日志。
我一开始出现 retry-time: 60 retries: 26, Error_code: MY-002061 这个错误。
这个错误的意思是,创建的授权账号没有指定密码策略。
也就是主数据库创建账号时,采用了如下的方式:
CREATE USER 'rootslave'@'从服务器ip地址' IDENTIFIED BY 'root123';
正确的创建方式,应该是:
CREATE USER 'rootslave'@'从服务器ip地址' IDENTIFIED WITH mysql_native_password BY 'root123';
获取会有这种情况:
Last_IO_Errno: 13114
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
此时:
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
mysql> reset slave;
Query OK, 0 rows affected (0.10 sec)
mysql> start slave;
Query OK, 0 rows affected (0.06 sec)
再show slave status \G 查看。
谨记:仔细检查从数据库的连接账号,密码,File名称,pos端口,避免小问题。