MySQL Replication 又叫做AB复制或者主从复制。在主上把日志复制到从上,从上根据日志去执行相应的操作,从而达到两个数据库的数据保持一致。主从机制非常脆弱,从上千万不能够修改数据。我们可以通过监控来控制。
准备工作:没有mysql服务的机器
1.安装mysql服务( http://dev.mysql.com/downloads/ mysql官网)
cd /usr/local/src/
wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.48-linux2.6-i686.tar.gz
tar zxvf /usr/local/src/mysql-5.5.48-linux2.6-i686.tar.gz
mv mysql-5.5.48-linux2.6-i686 /usr/local/mysql
建立mysql用户
useradd -s /sbin/nologin mysql
cd /usr/local/mysql
拷贝配置文件
cp support-files/my-default.cnf /etc/my.cnf
拷贝启动脚本文件并修改其属性
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
修改启动脚本
vim /etc/init.d/mysqld \\修改
basedir=/usr/local/mysql
datadir=/data/mysql
保存退出
如果原来安装过mysql,需要删除:
rm -rf data/mysql
初始化数据库
cd /usr/local/mysql
mkdir -p /data/mysql ; chown -R mysql:mysql /data/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql//看到两个OK说明正常初始化了
启动mysql
/etc/init.d/mysqld start
现在装第二个mysql
cd ..
cp -r mysql mysql_slave
cd mysql_slave/
cp /etc/my.cnf .
vim my.cnf//编辑配置文件在mysqld模块中修改!
port:改成3307
socket:改成/tmp/myql_slave.sock
socket行下添加一行:
datadir = /data/mysql_slave
保存退出
初始化slave数据库
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave
显示两个OK表示成功
复制修改启动文件
cd /etc/init.d/
cp mysqld mysqldslave
vim mysqldslave
//修改basedir
basedir=/usr/local/mysql_slave
//修改datadir
datadir=/data/mysql_slave
//修改conf
conf=$basedir/my.conf
//在datadir行下添加
conf=$basedir/my.conf
保存退出
启动第二个mysql
/etc/init.d/mysqldslave start
查看是否正常启动
netstat -lnp|grep mysql
ps aux|grep mysql
现在开始做mysql主从:主是3306从是3307
登录mysql的方法;
mysql -S /tmp/mysql.sock mysql -S /tmp/mysql_slave.sock
mysql -h127.0.0.1 -P3306 mysql -h127.0.0.1 -P3307
在主上创建一个测试的数据库:
/usr/local/mysql/bin/mysql
create database db1;
quit;
拷贝数据库,用作测试主从
mysqldump -S /tmp/mysql.sock mysql > 123.sql
mysql -S /tmp/mysql.sock db1 < 123.sql
编辑配置文件
vim /etc/my.cnf
//打开server-id
server-id = 1#id可以自定义不过得保证和从上不一样
//打开log-bin
log-bin=aming#名字可以自定义
#可以设置指定黑白名单库来做主从,在log-bin行下添加:
#白:binlog-do-db=db1,db2黑:binlog-ignore-db=mysql
保存退出
重启主mysql:
/etc/init.d/mysqld restart
ls /data/mysql#会发现后缀为00001和index的binlog文件
创建一个专门用来传输binlog的用户
/usr/local/mysql/bin/mysql
grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123';
flush privileges;
flush tables with read lock;
show master status;
重新开一个终端,用作slave:
编辑配置文件
vim /usr/local/mysql_slave/my.cnf
//修改server-id
server-id = 111
保存退出
/etc/init.d/mysqldslave restart //重启
为了实现主从,要保持两个数据库一致:
mysql -S /tmp/mysql_slave.sock -e "create database db1"
mysql -S /tmp/mysql_slave.sock db1< /usr/local/mysql_slave/123.sql
现在开始实现同步:
mysql -S /tmp/mysql_slave.sock
slave stop;
Change master to master_host='127.0.0.1',master_port=3306,master_user='repl',master_password='123123',master_log_file='aming.000001',master_log_pos=106;#log_file和log_pos在主上使用命令show master status;查看。这段是核心配置!
slave start;
show slave status\G;#查看Slave_IO_Running和Slave_SQL_Running状态是否是yes,如果是主从设置成功。如果不是,会显示错误信息。
测试主从:
在主上:
unlock tables;
use db1;
show tables;
drop table help_category;
从上:
use db1;
show tables;#发现help_category已经没有了。