linux mysql8 主从复制

一、首先是主数据库。

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端口,避免小问题。

你可能感兴趣的:(linux,mysql)