💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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` 指的是主库所在远程主机的用户名(猜的)。