# 1\. 主库创建允许远程连接 + 至少具备 replication、slave 权限的 MySQL 用户
### 用户名解释
这边的用户 `'slave_mysql'@'192.168.%'` 指的是只允许 `ip` 以 `192.168.` 开头的远程主机进行连接(本地测试用的),新手建议是设置为 `'slave_mysql'@'%'`。注意数据库通配符的使用。
~~~
mysql -u root -p
mysql> grant replication slave on *.* to 'slave_mysql'@'192.168%' identified by '123456';
~~~
# 2\. 主库配置文件设置
### 区分
`[mysql]` 是针对数据库客户端的配置
`[mysqld]` 是针对数据库服务器的配置
### 这边设置的是针对数据库服务器的配置:
~~~
[mysqld]
# 设置服务器ID,从服务器ID必须大于主服务器ID
server-id=1
# 启动 mysql 的二进制日志系统
log-bin=mysql-bin
# 需要同步的数据库名,如果有多个,则重复此参数,每个数据库一行
binlog-do-db=Test
# 不同步的 mysql 数据库,同上
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
~~~
# 3\. 从库配置文件
~~~
[mysqld]
server-id=2
log-bin=mysql-bin
# 要复制的数据库
replicate-do-db=Test
# 不要复制的数据库
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema
replicate-ignore-db=sys
~~~
# 4\. 查看主库 master 信息
~~~
show master status;
~~~
#### 结果:
~~~
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000006 | 2216 | Test | mysql,performance_schema,information_schema,sys | |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)
~~~
#### 这边特别注意的是 `file`、`position`、`binlog_do_db` 三个字段,分别是二进制日志文件(实现主从复制的文件),从库开始复制的位置,需要进行同步的数据库。
# 5\. 从库,开启同步
~~~
mysql> change master to
mysql> master_host='192.168.1.1' , # 远程主机的IP地址
mysql> master_user='slave_mysql'@'192.168.%' , # 主库允许远程连接的用户
mysql> master_password='123456' , # 密码
mysql> master_log_file='mysql-bin.000006' , # 同步的日志文件
mysql> master_log_pos=2216; # 开始同步的位置
~~~
# 6\. 从库检查是否成功开启
~~~
show slave status \G
~~~
#### 结果
~~~
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.150.128
Master_User: slave_mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 2216
Relay_Log_File: grayVTouch-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes // 必须为 yes
Slave_SQL_Running: Yes // 必须为 yes
Replicate_Do_DB: Test
Replicate_Ignore_DB:
......
1 row in set (0.00 sec)
~~~
#### `Slave_IO_Running` 和 `Slave_SQL_Runniing` 必须为 `yes` ,表示开启成功。
# 7\. 查看效果
#### 主库中针对同步的数据库新增(或修改)数据,然后查看从库对应的数据库。
#### 主库
~~~
use Test;
create table if not exists test_master_slave (
id int primary key auto_increment not null ,
action char(255) ,
c_time timestamp default current_timestamp
);
~~~
#### 从库
查看 `Test` 数据库有没有出现 `test_master_slave` 表。
# 8\. 相关问题
### 1. `Slave_IO_Running:connecting` 问题
从库没有访问主库的权限,实际就是主库没有开启远程访问的账号。解决方法,主库新建具有远程连接的账号,从库关闭现有的主从复制进程,重新设置 master,然后在开启主从复制。
1. 执行 步骤1
2. `mysql> stop slave;`
3. 重复 步骤5(包含步骤5)以下步骤
### 2. `Slave_IO_Running:no` 问题
`SQL` 语句出现错误,导致同步进程终止。具体可以查看从库错误日志,路径:`/path/to/mysql/data/userAccount.err` 文件。`userAccount` 指的是主库所在远程主机的用户名(猜的)。
- 第一部分 每日内容
- 第一天 需求分析
- 第二天 ER图
- 第三天 git
- 第四天 laravel基础串讲
- 第五天 ORM
- 第六天 项目的后台模板、登录模块、表单验证
- 第七天 用户模块
- 7.1登录中间件
- 7.2用户的添加
- 7.3用户的查询
- 7.4用户的修改
- 7.4用户的删除
- 第八天 分类模块
- 8.1分类表和分类模型
- 8.2分类排序
- 第九天 文件模块
- 9.1百度编辑器
- 9.2文件上传
- 9.3阿里OSS
- 9.4七牛云
- 第十天 网站配置模块
- 10.1网站配置表结构
- 10.2添加网站配置
- 10.3将数据表中的配置信息写入config配置文件中
- 10.4浏览配置信息
- 第十一天 网站前台
- 11.1共享变量
- 11.2前台首页
- 第十二天 RBAC
- 第十三天 手机验证码
- 13.1手机验证码
- 13.2发送验证邮件
- 13.3密码找回
- 第十四天 实用组件
- 第十五天 服务器方面
- LNMP
- MySQL主从
- laravel主从
- 负载均衡
- 第二部分 所需模块
- 1登录模块
- 2注册模块
- 3无限极分类模块
- 4图片管理模块
- 5日志模块
- 6标签模块
- 7购物车模块
- 8验证码模块
- 9支付模块
- 10秒杀模块
- 11验证码模块
- 12消息队列模块
- 13ckplayer播放器
- 14美洽客服插件
- 15markdown和百度编辑器