最近在玩mysql主从配置,在此记录一下
一、前言
1、安装两个虚拟机(CentOS 7)。iP分别是192.168.47.131 和192.168.47.133.其中192.168.47.133作为主数据库,192.168.47.131作为从数据库
2、在线安装Mysql数据库。具体安装方法请参考:
3、在主从数据库中创建 testdb 数据库。(作为同步的数据库)
二、具体步骤
1、主数据库(master)配置
(1)在Master MySQL上创建一个用户‘test’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
mysql>create user test; //创建新用户 //test用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.47.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.47.0-192.168.47.255的Server都可以以test用户登陆主服务器。当然你也可以指定固定Ip。 mysql> GRANT REPLICATION SLAVE ON *.* TO ‘test‘@‘192.168.47.%‘ IDENTIFIED BY ‘mysql‘;
(2)修改Master MySQL的配置文件 my.cnf
[[email protected] local]# vim /etc/my.cnf //在my.cnf 的 [mysqld]添加以下内容 server_id =1 log-bin=mysql-bin binlog-do-db=testdb #允许复制的数据库名称,一行代表一个数据库 binlog-ignore-db=mysql #不复制的数据库
(3)重启数据库,查看。
[[email protected] local]# service mysqld restart //进入数据库 show master status;
结果如下:
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 699 | testdb | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
看到file和position,记录下来,后面需要用到。分别是 mysql-bin.000001和699
2、从数据库(slave)配置
(1)修改MySQL的配置文件 my.cnf
[[email protected] local]# vim /etc/my.cnf //在my.cnf 的 [mysqld]添加以下内容 server_id=2 log-bin=mysql-bin replicate-do-db=testdb replicate-ignore-db=mysql
(2)重启数据库 命令:service mysqld restart。登录数据库。
mysql> stop slave; #关闭slave同步进程 mysql> change master to master_host=‘192.168.47.133‘,master_user=‘test‘,master_password=‘mysql‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=699;mysql> start slave; #启动slave同步mysql> show slave status; #查看状态
注意:slave_io_running:yes 和slave_sql_running:yes 说明能正常同步了。
3、测试。
(1)在主服务器中 testdb 创建 t_user 表,并插入一条数据。
CREATE TABLE t_user( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(50), age INT ) INSERT INTO t_user (NAME,age) VALUES (‘test‘,21);
(2)在从服务器中的 testdb 查看是否存在 t_user 表,并且是否有相应的数据。
SELECT * FROM t_user;
从数据库中存在 t_user 表 ,并且有相应的数据。说明mysql主从配置已经成功了。