mysql主从复制同步
主master : 192.168.8.10
- 开启二进制日志
- 配置唯一的server-id
- 获得master二进制日志文件名及位置
- 创建一个用于slave和master通信的用户账号
从slave : 192.168.8.11
- 配置唯一的server-id
- 使用master分配的用户账号读取master二进制日志
- 启用slave服务
1、配置主库:
1)、授权给从数据库服务器
mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'192.168.8.11' identified by 'b5HMLIWQSdT630Dp';
mysql>FLUSH PRIVILEGES;
## 查看MySQL现在有哪些用户及对应的IP权限
mysql> select user,host from mysql.user;
2)、修改主库配置文件,开启binlog,并设置server-id,每次修改配置文件后都要重启mysql服务才会生效
在该配置文件[mysqld]下面添加下面内容:
[mysqld]
log-bin=/var/lib/mysql/binlog
server-id=1
binlog-do-db = cmdb
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id:master端的ID号;
log-bin:同步的日志路径及文件名,一定注意这个目录要是mysql有权限写入的(我这里是偷懒了,直接放在了下面那个datadir下面);
binlog-do-db:要同步的数据库名
还可以显示 设置不同步的数据库:
binlog-ignore-db = mysql 不同步mysql库和test库
binlog-ignore-db = test
3)、查看主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
mysql> show master status;
+-------------------+-----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+-----------+--------------+------------------+-------------------+
| mysqld-bin.000121 | 514780853 | | | |
+-------------------+-----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2、配置从库
1)、理所当然也是从配置文件着手,在/etc/my.cnf 添加下面配置:
[mysqld]
server-id=2 //必须是唯一的
重启时报错:mysqld: unknown variable ‘master-host=
说明mysql不认识这些变量,网上搜罗了一番,原因是mysql5.5+版本主从复制不支持这些变量,需要在从库上用命令来设置:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='b5HMLIWQSdT630Dp',
MASTER_LOG_FILE='mysql-bin.000071',
MASTER_LOG_POS=120; #后面两个参数的值与主库保持一致
MASTER_CONNECT_RETRY=10;
mysql> CHANGE MASTER TO MASTER_HOST='111.230.144.106',
-> MASTER_PORT=3306,
-> MASTER_USER='slave2',
-> MASTER_PASSWORD='b5HMLIWQSdT630Dp',
-> MASTER_LOG_FILE='mysqld-bin.000121',
-> MASTER_LOG_POS=514780853,
-> MASTER_CONNECT_RETRY=10;
2)、启动slave进程
mysql> start slave;
错误error 1872
执行重置
reset slave;
Query OK, 0 rows affected (0.04 sec)
3)、查看slave的状态,
show slave status;
如果下面两项值为YES,则表示配置正确:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
从库正在等待主库更新数据。。。Waitin for master to send event...
三、同步主库已有数据到从库
主库操作:
1、停止主库的数据更新操作
mysql>flush tables with read lock;
2、新开终端,生成主数据库的备份(导出数据库)
[root@zhoujietest ~]# mysqldump -uroot -ptest123 cmdb > cmdb.sql
3、将备份文件传到从库
[root@zhoujietest ~]# scp cmdb.sql root@192.168.8.11:/root/
4、主库解锁
mysql>unlock tables;
然后在主服务器上查询当前二进制文件的文件名及偏移位置:
mysql > show master status;
然后停止主服务器上的MySQL服务:
shell> mysqladmin -u root shutdown
从库操作:
1、停止从库slave
mysql>slave stop;
2、新建数据库cmdb
mysql> create database cmdb default charset utf8;
3、导入数据
[root@ops-dev ~]# mysql -uroot -ptest123 cmdb<cmdb.sql
4、查看从库已有该数据库和数据
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cmdb |
| mysql |
| performance_schema |
| test |
+--------------------+
此时主从库的数据完全一致,如果对主库进行增删改操作,从库会自动同步进行操作。