数据库安装:

  1. 这里网上很多,大家自己百度就好了,怕麻烦可以自己安装宝塔、LNMP等等环境
  2. 这里我自己的服务器环境都是centos,一个是手动安装的MYSQL,一个是宝塔安装的MYSQL

主从配置:

1. 在两台服务商分别按照好宝塔 及其数据库

2.分别在两台服务器上创建数据库

2.1 服务器参数说明

  • 一号服务器:192.168.0.1
  • 二号服务器:192.168.0.2

2.2 对于宝塔来说也不用配置什么东西 直接 使用ssh链接工具 进入服务器 并且登录root用

2.3 重要的来了!首先 给你一号服务器创建的用户 进行权限升级

mysql> grant all privileges on *.* to 'app1'@'%' identified by '123456' with grant option;

这里备注下:app1代表是我1号服务器的登录用户。

2.4 一号服务器 使用命令查看信息:

mysql> show master status;

+———————-+———-+——————-+————————+
| File                            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+———————-+———-+——————-+————————+
| mysql-bin.000016 |     5501   |                              |                                       |
+———————-+———-+——————-+————————+

得到如上信息。

2.5 进入二号服务器 同样使用root用户登录数据 使用命令开始进行连接

mysql> change master to master_host='192.168.0.1',master_user='app1',master_password='123456',master_log_file='mysql-bin.000016',master_log_pos=5501;

这里备注下

  • master_host:主服务器的ip
  • master_user:主服务器的用户
  • master_password: 主服务器的密码
  • master_log_file: 也就是我们一号服务器打印的File表里的信息
  • master_log_pos:一号服务器中Position 这里一定要看清楚 否则凉凉

2.6 运行完命令 查看状态

 mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

表示成功

如果出现No 重新启动下mysql服务即可!

填坑

1、根据上面的方法发现结果如下

Slave_IO_Running: No
Slave_SQL_Running: Yes

解决问题的思路:

  1. 找到mysql配置的这个文件/etc/my.cnf
  2. 在文件中找到mysql错误异常日志文件的路径,我配置的是log-error=/var/log/mysqld.log
  3. 编辑/var/log/mysqld.log文件
  4. 查看具体异常信息

异常信息一:

[ERROR] Slave I/O for channel ‘’: Fatal error: The slave I
/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must
be different for replication to work. Error_code: 1593

在这里插入图片描述

问题定位:

由于uuid相同,而导致触发此异常

解决方案:

把uuid修改即可

具体解决方案:

查询命令找此auto.cnf修改uuid即可:

find -name auto.cnf

其实这个文件就在mysql的data目录中/app/mysql-5.7.25/data,这是我的文件位置
启mysql服务器,再查看mysql从节点的状态,恢复正常

7. 重新启动mysql

2、错误代码一样都是1593,报错方式不一样

报错如下:

Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it). Error_code: 1593

检查两台服务器的server_id

mysql> show variables like 'server_id';

解决:

修改mysql并没有从my.cnf文件中更新server_id = 2;重启mysql

再次查看server_id,有可能mysql并没有从my.cnf文件中更新server_id,既然这样就只能手动修改了

mysql> set global server_id=2; #此处的数值和my.cnf里设置的一样就行
mysql> slave start;

重启mysql

3、解决了上面问题,重启后发现

Slave_IO_Running: Yes
Slave_SQL_Running: No

卧槽:无情

报错如下:

Last_Error: Error 'Table 'coop.Coop_Data' doesn't exist' on query. Default database: 'gcore'. Query: 'update coop.Coop_Data set State='2',NameLevel='2',CheckedTime=now(),Memo='' where DAID='18601''
Skip_Counter: 0
Last_SQL_Errno: 1146

原因是:

先使用的use db_name1,然后执行了 update db_name2.table set这种sql语句。

解决方法:

  • 在从服务器上设置忽略该错,在my.cnf文件中添加“slave-skip-errors = 1146”,
  • 如果少量的这种错误,直接在mysql client里面设置“set global sql_slave_skip_counter=1”;
  • 或者直接将主库的数据库内容先复制一份到从库

重启mysql