mysql主从复制报错解决方案

mysql主从复制报错解决方案

我先制造个错误 在slave删除个info3字段 然后在master 在info3插入数据 报错如下

         Last_SQL_Errno: 1054
         Last_SQL_Error: Error 'Unknown column 'info3' in 'field list'' on query. Default database: 'test1'. Query: 'INSERT INTO `test1`.`wef` (`id`, `info1`, `info2`, `info3`) VALUES (NULL, '12', '1', '1')'

这种错误 解决方法比较简单 直接把master表导出来 然后清空slave表 再导入就可以了
然后

stop slave;
 change master to master_host='121.41.35.30',master_port=3306,master_user='dog',master_password='123456',master_log_file='master-bin.000002',master_log_pos=787554;

//重新设置读取master正确二进制文件的位置

start slave

就可以了

redis主从配置笔记

redis主从配置笔记
redis主从配置可比mysql主从简单多了

1 直接进入slave 配置redis.conf
slaveof 121.41.35.30 6379 (映射到主服务器上)
如果master设置了验证密码,还需配置masterauth。楼主的master设置了验证密码为admin,所以配置masterauth admin。
 配置完之后启动slave的Redis服务,OK,主从配置完成。下面测试一下:

  在master和slave分别执行info命令,查看结果如下:

  master:
    # Replication
role:master
connected_slaves:1
slave0:ip=121.40.134.7,port=6379,

  slave:
# Replication
role:slave
master_host:121.41.35.30
master_port:6379
master_link_status:up //这个代表连接上

输入如上那就是一般就是成功了

然后在master执行set age 24

在slave执行get age,看是否能得到24,如果能够得到值则说明配置成功。

mysql主从复制笔记

mysql主从复制笔记(2台阿里云服务器 centos系统 mysql版本最好一致)
1 配置Master主服务器
在Master MySQL上创建一个用户‘dog’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'dog'@'localhost';

ps:先localhost 然后再改成%, 然后从数据库登陆master数据库测试下 能不能连接上

2 找到MySQL安装文件夹修改my.cnf文件。mysql中有好几种日志方式,这不是今天的重点。我们只要启动二进制日志log-bin就ok。

server-id=1 //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号 这个地方要注意不能出现relay-log
log-bin=master-bin
log-bin-index=master-bin.index

然后重启mysql 运行如下

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      313 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set

3 设置slave数据库 这个地方要注意不能出现log-bin log-bin-index
找到mysql配置文件

[mysqld]
 server-id=2
 relay-log-index=slave-relay-bin.index
 relay-log=slave-relay-bin 

重启MySQL服务

4 连接Master slave数据库命令输入如下 直接运行

change master to master_host='192.168.1.104',
master_port=3306,
master_user='dog',
master_password='123456',
master_log_file='master-bin.000001',
master_log_pos=313;

如果报错了 那肯定是master权限问题 检查下master权限

5 启动Slave
start slave;

6查看slave状态是否成功

 mysql> show slave status;

        Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.1.104 //主服务器地址
              Master_User: dog//授权帐户名,尽量避免使用root
              Master_Port: 3306    //数据库端口,部分版本没有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 313     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000003
              Relay_Log_Pos: 251
              Relay_Master_Log_File: mysql-bin.000004
              Slave_IO_Running: Yes    //此状态必须YES
              Slave_SQL_Running: Yes     //此状态必须YES

ps:如果Slave_IO_Running显示conecting 那就是change master to master_hos李的参数写错了 仔细对应下 主数据库SHOW MASTER STATUS里的数据
还有看看主服务器的mysql错误日志
还有仔细看看主从数据库配置文件有没有写错

7在主服务器创建个数据库 试试 ps前期 主从数据库内容必须保持一致 不然会报错


mysql> create database dsd;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bird               |
| dsd                |
| hi_db              |
| mysql              |
| performance_schema |
| wordpress          |
+--------------------+
7 rows in set (0.00 sec)

slave数据立马会更新


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dsd                |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

如果你要查看master 修改的二进制可以去master phpmyadmin 二进制可以查看
ps:原理就是master运行mysql语句 会更新到二进制日志 然后slave读取master的二进制日志 进行运行mysql语句
比如 master执行了一条update语句 slave也会执行一条update语句 如果slave因为表结构跟master不一样 导致运行 sql出错 就会造成主从复制出错