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已经没有了。