Mysql实现主从复制
首先编辑主节点mysql配置文件:
[root@localhost ~]# vim /etc/my.cnf
在[mysqld]下添加以下配置(可以只添加server-id配置)
[mysqld]
# 开启binlog二进制日志功能,可以随便取
log-bin=mysql-bin
# 同一局域网内唯一
server-id=100
#复制过滤:不需要备份的数据库
binlog-ignore-db=mysql
#为每个session分配内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
#主从复制格式(mixed,statement,row,默认是statement)
binlog_format=mixed
# 需要同步的数据库,如果不配置则同步全部数据库
# binlog-do-db=test_db
# binlog日志保留的天数,清除超过10天的日志
# 防止日志文件过大,导致磁盘空间不足
expire-logs-days=10
修改完配置文件后注意重启mysql服务
接下来将从节点也配置上,需要注意server-id同一局域网内唯一,从机配置可以另外加上两条:
#如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
#跳过主从复制过程中遇到的所有错误或者指定类型错误,避免slave端复制中断
#如1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
接下来需要登录主节点mysql,授权slave服务可以同步master服务
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.106' identified by 'yourpassword'; //这边192.168.0.106为从节点主机,yourpassword为从节点mysql密码
mysql> FLUSH PRIVILEGES; //刷新系统权限表
查看是否授权上:
mysql> select user,host from mysql.user;
+---------------+---------------+
| user | host |
+---------------+---------------+
| root | % |
| root | 192.168.0.106 |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+---------------+
5 rows in set (0.00 sec)
接下来查看主服务器 binlog 记录状态:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 601 | | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
随后登录到从节点mysql,连接主服务器并设置复制的起始节点:
mysql> change master to master_host='192.168.0.105',master_user='root',master_password='masterPwd',master_log_file='mysql-bin.000001',master_log_pos=601,master_port=3306;
//其中master_log_file为上面查看信息中的File信息,master_log_pos为Position信息
启动slave服务并查看状态:
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.105
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: localhost-relay-bin.000005
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
接下来可以在主节点mysql上创建数据库或表进行测试,如果从节点上也出现相应数据库或表则完成主从复制