一)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
主服务器创建库测试同步
从服务器上查看
PS:
主从复制完成。