本来是很简单的一个配置,但是因为mysql版本的原因致使照着网上别人的文章花了老鼻子力气也没配出来。现在把整个过程记录下来以供以后使用的时候有所参照!
纸上得来终觉浅 绝知此事要躬行!切记切记!
首先装备Ubuntu环境,我本机用的是ubuntu-12.04.3-desktop-amd64版本。
第一步,建立两个ubuntu的虚拟机
ubuntu 主: 192.168.80.129
ubuntu 备: 192.168.80.130
第二步,分别建立mysql:
1.命令行下执行 sudo apt-get install mysql-server
执行中间会要求输入root的密码,整个过程不报错,则安装成功。我当前的安装后的mysql版本是5.5.38-0ubuntu0.12.04.1-log
2.分别为2台服务器上的mysql修改root账号密码
用root账号,密码不输登陆mysql,选择mysql数据库 use mysql
update user set password=password('newpassword') where user='root';
flush privileges; #一定要刷新,不然不生效
3.分别为2台机器设置允许其他主机远程连接mysql服务
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION //赋予任何主机访问数据的权限
flush privileges;
执行完后最好重启mysql服务!
4.创建共享数据库
分别登录master机和slave机的mysql:mysql –u root –p
创建数据库:create database testrep;
5.修改master机器中mysql配置文件my.cnf,该文件在/etc目录下
sudo gedit /etc/mysql/my.cnf
在[mysqld]配置段添加如下字段
server-id=129
log-bin=log
binlog-do-db=testrep
binlog-ignore-db=mysql
在master机上为slave机添加一同步帐号
grant replication slave on *.* to 'repl'@'192.168.80.130' identified by '123456';
重启master机的mysql服务:service mysqld restart
用show master status 命令看日志情况
mysql>show master status;
+-----------------+------------+-------------------+-----------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+------------+-------------------+-----------------------+
| log.000003 | 98 | repl | mysql |
+-----------------+------------+-------------------+-----------------------+
1 row in set (0.00 sec)
记录下File 和 Position的值,后续再slave机中设置slave备份需要。
6.修改slave机中mysql配置文件(有很多网上教程说在my.cnf中配置master-host等master开头的参数,结果在本mysql版本中,配置了识别不了,坑爹!最好是改为用change master方式解决)
同样在[mysqld]字段下添加如下内容
server-id=130
然后重启slave机的mysql
在slave机中进入mysql
再首先执行 stop slave;
然后执行 change master to master_host='192.168.80.129', master_user='repl', master_password='123456', master_log_file='log.000003' ,master_log_pos=98; (此处值需和master机器中查出的一致)
最好执行
mysql>start slave;
mysql>show slave status\G;
如果Slave_IO_Running、Slave_SQL_Running状态为Yes则表明设置成功。
7、测试主从服务器是否能同步
在主服务器上面新建一个表,必须在testrep数据下
mysql> use testrep
Database changed
mysql> create table test(id int,name char(10));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(1,'zaq');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test values(1,'xsw');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------+------+
| id | name |
+-------+------+
| 1 | zaq |
| 1 | xsw |
+-------+------+
2 rows in set (0.00 sec)
在从服务器查看是否同步过来
mysql> usetestrep;
Database changed
mysql> select * from test;
+------+------+
| id | name |
+------+------+
| 1 | zaq |
| 1 | xsw |
+------+------+
2 rows in set (0.00 sec)
说明已经配置成功,第一种主从成功
再加一个备份slave,ubuntu 备2: 192.168.80.132, 执行步骤如第一个slave的配置后,第一种主从从成功
接着实验双机互为主备:
ubuntu 主备1: 192.168.80.129
ubuntu 主备2: 192.168.80.130
1.修改原 ubuntu 主备1: 192.168.80.129 的配置文件my.cnf
server-id=129
log-bin=log
binlog-do-db=testrep
binlog-ignore-db=mysql
replicate-ignore-db=mysql
replicate-do-db=testrep
2.在master机上为slave机添加一同步帐号
grant replication slave on *.* to 'repl'@'192.168.80.130' identified by '123456';
重启master机的mysql服务:service mysqld restart
用show master status 命令看日志情况
mysql>show master status;
+-----------------+------------+-------------------+-----------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+------------+-------------------+-----------------------+
| log.000003 | 98 | repl | mysql |
+-----------------+------------+-------------------+-----------------------+
1 row in set (0.00 sec)
记录下File 和 Position的值为log.000004和107,后续在(ubuntu 主备2)slave机中设置slave备份需要。
change master to master_host='192.168.80.129', master_user='repl', master_password='123456', master_log_file='log.000004' ,master_log_pos=107;
然后重启slave,start slave;
查看show slave status\G;,出现如下两个YES则Slave备份配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
4.ubuntu 主备2中为为slave用户(ubuntu 主备1: 192.168.80.129)添加同步专用权限
grant replication slave on *.* to 'repl'@'192.168.80.129' identified by '123456';
flush privileges;
change master to master_host='192.168.80.130', master_user='repl', master_password='123456', master_log_file='log.000001' ,master_log_pos=107;
然后重启slave,start slave;
查看show slave status\G;,出现如下两个YES则Slave备份配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
解决slave进程No的情况
http://zhidao.baidu.com/link?url=eewPAI9oQCes7umENqRdo3Z6Z5wXn_Qv7NuU_6iJ1PuFONUgtCJOoZvnzctsts_04BQ4ayZKFow7Xlpm0vicPq