数据库安装:
- 这里网上很多,大家自己百度就好了,怕麻烦可以自己安装宝塔、LNMP等等环境
- 这里我自己的服务器环境都是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
解决问题的思路:
- 找到mysql配置的这个文件/etc/my.cnf
- 在文件中找到mysql错误异常日志文件的路径,我配置的是log-error=/var/log/mysqld.log
- 编辑/var/log/mysqld.log文件
- 查看具体异常信息
异常信息一:
[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