一)Mysql主从复制图解

Mysql主从复制_Mysql主从复制

二)实现过程

注意事项:

主和从mysql版本需要一致,如果不一致,主的必须低于从的,如果是新的主机刚安装的服务,复制都是从0开始,如果主服务器已经运行过了一段时间,并且存在了数据集,这时就需要把主服务器备份后,然后从主服务器备份的时所处的位置进行开始复制。

大致的配置过程:

1)修改Server-id,主和从的不能一致

2)主服务器启动二进制日志

3)主服务器创建一个账号给从使用

4)从服务器需要启动中继日志,不需要启动binlog二进制日志

5)使用主服务器授权的账号,进行连接主服务器

6)启动从服务器,从而主从复制开始

具体操作如下:

1)服务器的版本,主从均是一样的系统版本。

 

[root@station141 ~]# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m
Mage Education Learning Services
http://www.magedu.com
[root@station141 ~]# uname -r
2.6.32-358.el6.x86_64
[root@station141 ~]# uname -a
Linux station141.magelinux.com 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@station141 ~]# uname -n
station141.magelinux.com
[root@station141 ~]# uname -m
x86_64

2)mysql的安装这里使用的是源码编译安装的

安装依赖包和cmake
yum -y install readline-devel zlib-devel openssl-devel cmake gcc gcc-c++ make cmake ncurses-devel libtool
yum groupinstall “Development tools”

 

tar xf mysql-5.5.33.tar.gz
mkdir /mydata/data -p
groupadd -r mysql
useradd -g mysql -r -d /mydata/data mysql
cd mysql-5.5.33
[root@localhost mysql-5.5.33]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  -DMYSQL_DATADIR=/mydata/data -DSYSCONFDIR=/etc  -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1  -DWITH_SSL=system -DWITH_ZLIB=system  -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ciWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

ps:

如果编译的时候报错的话,删除CMakeCache.txt这个文件,在重新执行编译即可。

make && make install
chown :mysql ./* -R
chown -R mysql.mysql /mydata/data/
scripts/mysql_install_db --user=mysql --datadir=/mydata/data/  --basedir=/usr/local/mysql 数据初始化
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
cp support-files/my-large.cnf /etc/my.cnf
mkdir -pv /mydata/data
vim /etc/my.cnf
datadir = /mydata/data存放数据路径

vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
启动mysqld
service mysqld restart

安装完成。主从安装同上。

 

主操作:

vim /etc/my.cnf

log-bin=/mydata/data/mysql-bin目录随便定义

server-id       = 1

创建目录,并且修改权限

mkdir -pv /mydata/binlogs/
chown -R mysql.mysql /mydata/binlogs/

启动mysql

[root@station141 ~]# /etc/init.d/mysqld restart

创建账号授权的账号为Andy,密码为Andy.com.

grant replication slave,replication client on *.* to ‘Andy’@‘172.16.%.%' identified by 'Andy.com';

刷新授权表,让创建的用户立刻生效

flush privileges;

 

从服务器操作:

vim /etc/my.cnf

server-id       = 10
relay-log = /mydata/relaylogs/relay-bin中继日志路径

关闭binlog

log-bin=OFF或者注释掉

复制权限:

chown -R mysql.mysql /mydata/relaylogs/

启动服务器:

/etc/init.d/mysqld restart

查看中继日志是否启动

mysql> show global variables like '%relay%';
+-----------------------+-----------------------------+
| Variable_name         | Value                       |
+-----------------------+-----------------------------+
| max_relay_log_size    | 0                           |
| relay_log             | /mydata/relaylogs/relay-bin |
| relay_log_index       |                             |
| relay_log_info_file   | relay-log.info              |
| relay_log_purge       | ON                          |
| relay_log_recovery    | OFF                         |
| relay_log_space_limit | 0                           |
| sync_relay_log        | 0                           |
| sync_relay_log_info   | 0                           |
+-----------------------+-----------------------------+
9 rows in set (0.12 sec)

连接主服务器:

change master to master_host=’172.16.100.7‘,master_user=’Andy‘,master_password=‘Andy.com’;

备注:我这里之所以没有写binlog和pos是因为我是新安装的数据库,如果你的数据库操作过需要特殊指定。

例如:

change master to master_host='192.168.254.103',master_user='andy',master_password='andy.com',master_log_file='mysql-bin.000004',master_log_pos=355;


启动从服务器线程:

start slave

查看从服务器的两个线程是否都已启动

 Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主服务器创建库测试同步

Mysql主从复制_Mysql主从复制_02

从服务器上查看

Mysql主从复制_Mysql主从复制_03

PS:

    主从复制完成。