测试是基于centos6.5 + MySQL 5.1的环境,
1.安装及配置MySQL
安装服务端
yum install mysql-server mysql-devel
安装客户端
yum install mysql
设置MySQL服务
chkconfig mysqld on #设置MySQL服务随系统启动自启动
chkconfig --list mysqld #检查MySQL的状态,如下所示2-5为on,则设置OK
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
service mysqld start #启动MySQL服务
service mysqld stop #停止MySQL服务
设置MySQL密码
mysqladmin -u root password root(此处填写自己设置的密码)
注: MySQL在刚被安装的时候,它的root用户是没有设置密码的,通过上述命令可对其进行设置。
登录MySQL
mysql -uroot -proot
2.配置MySQL主从同步
准备两台测试的机器,如所示步骤安装MySQL环境,并开启MySQL服务。
主master:10.23.32.46
从slave:10.23.187.66
配置主库(master)
修改主库配置文件,开启binlog,并设置server-id,每次修改配置文件后都要重启mysql服务才会生效。
vim /etc/my.conf 在该配置文件[mysqld]下面添加下面内容: [mysqld] log-bin=/var/lib/mysql/binlog #同步的日志路径及文件名,注意这个目录MySQL要有写入权限(此处为实例路径) server-id=46 #服务器唯一ID,默认是1,一般取IP后一段 binlog-do-db=test_sync #要同步的数据库名 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql
注:可以显示设置不同步的数据库名
binlog-ignore-db=mysql
,设置不同同步mysql数据库 修改配置后必须重新启动MySQL服务,
service mysqld restart
在主库中增加指定用户用于主备数据库的同步
- 创建一个MySQL用户
CREATE USER 'repl(用户名)'@'10.23.40.60' IDENTIFIED BY 'repl(密码)';
- 授权该用户访问数据库权限
grant all privileges on *.* to repl1@localhost identified by 'repl1' with grant option;
- 刷新授权
flush privileges;
注: 如果添加mysql用户存在问题,可查看该文档https://stackoverflow.com/questions/10299148/mysql-error-1045-28000-access-denied-for-user-billlocalhost-using-passw
授权给从数据库服务器
mysql> grant replication slave on *.* to 'repl(主库用户名)'@'10.23.187.66(从库Ip)' identified by 'repl(主库密码)'; mysql> flush privileges;
查看主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这点开始数据的恢复。
mysql> show master status; +---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | binlog.000001 | 199 | test_sync | | +---------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
至此主库已经配置好。
遇到的问题:
笔者在配置的过程中因为binlog-do-db这个参数调试了很久。发现如果指定binlog-do-db的选项,在插入的时候必须使用指定库名的插入方式(eg.insert into db.test (name, age) values (“test”, 24);),否则binlong中不会记录。
配置从库
修改配置文件,在/etc/my.cnf添加下面配置:
[mysqld] server-id=2
注意:修改配置后,需要重启服务
service mysqld restart
登录MySQL后配置如下信息
CHANGE MASTER TO MASTER_HOST='10.23.32.46', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS= 199;
启动slave进程
mysql> slave start; Query OK, 0 rows affected, 1 warning (0.00 sec)
- 停止slave,
slave stop;
- 重置slave,
reset slave;
- 停止slave,
查看slave的状态,如果下面的两项为YES,则表示配置正确:
mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes