mysql 主从复制
master安装和配置:
为mysql的安装提供前提环境和初始化安装mysql
创建数据库目录
# mkdir /data/mysql –pv
# mkdir /data/mysql/datafile
# mkdir /data/mysql/logfile
创建mysq用户
# useradd -r mysql
修改权限
# chown -R mysql.mysql /data/mysql/
使用mysql-5.5通用二进制包安装
解压mysql软件包
# tar xf mysql-5.5.28-linux2.6-i686.tar.gz-C /usr/local/
创建连接,为了方便查看mysql的版本等信息
# cd /usr/local/
#ln –sv mysql-5.5.28-linux2.6-i686.tar.gzmysql
修改属主属组
# cd mysql
# chown -R root.mysql ./*
初始化数据库
# scripts/mysql_install_db –user=mysql --datadir=/mydata/data/
提供配置文件
# cp support-files/my-large.cnf /etc/my.cnf
提供服务脚本
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
添加至服务列表
# chkconfig --add mysqld
# chkconfig --list mysqld
# chkconfig mysqld on
编辑配置文件,提供数据目录
# vim /etc/my.cnf
# The MySQL server 修改mysqld服务器端的内容
log-bin=mysql-bin 主服务器二进制日志文件前缀名
log-bin-index=mysql-bin.index 索引文件
innodb_file_per_table= 1 开启innodb的一表一个文件的设置
server-id = 1 必须是唯一的
datadir =/mydata/data 数据目录路径
启动mysql服务
# servicemysqld start
为了便于下面的测试,设置环境变量
# vim/etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
执行环境变量脚本,使其立即生效
# . /etc/profile.d/mysql.sh
mysql的安装配置完成,下面增加一个用于同步数据的账户并设置相关的权限吧!
建立用户账户
mysql> grant select on *.* to 'repl'@'10.77.4.%' identified by 'LSzhYccfwVtReKY9';
mysql>grant REPLICATION CLIENT on *.* to 'repl'@'10.77.4.%';
mysql>grant REPLICATION SLAVE on *.* to 'repl'@'10.77.4.%';
刷新数据使其生效
mysql> flush privileges;
至此我们mysql的Master设置完成,下面进行slave端的设置吧!
Slave安装配置:
安装环境配置:
创建mysql数据库目录
# mkdir /mydata/data –pv
创建mysql用户
# useradd -r mysql
修改数据目录权限
# chown -R mysql.mysql /mydata/data/
使用mysql-5.5通用二进制包安装mysql
解压mysql软件包
# tar xf mysql-5.5.28-linux2.6-i686.tar.gz-C /usr/local/
创建连接,便于查看mysql的版本等信息
# cd /usr/local/
# ln –sv mysql-5.5.28-linux2.6-i686.tar.gzmysql
修改mysql属主属组
# cd mysql
# chown -R root.mysql ./*
初始化mysql数据库
# scripts/mysql_install_db –user=mysql--datadir=/mydata/data/
提供mysql配置文件
# cp support-files/my-large.cnf /etc/my.cnf
提供服务脚本
# cp support-files/mysql.server /etc/init.d/mysqld
添加至服务列表
# chkconfig --add mysqld
编辑配置文件
# vim /etc/my.cnf
# The MySQL server
#log-bin=mysql-bin 禁用二进制日志,从服务器不需要二进制日志文件
datadir = /mydata/data mysql的数据目录
relay-log = relay-log 设置中继日志
relay-log-index = relay-log.index 中继日志索引
innodb_file_per_table = 1
server-id = 2 id不要和主服务器的一样
设置环境变量
# vim/etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
执行此脚本(导出环境变量)
# . /etc/profile.d/mysql.sh
启动服务
# service mysqld start
到这slave服务的mysql安装和配置完成,下面启动slave复制吧,开启之前先查看下从服务上的二进制文件吧
mysql> show master status; #在Master上执行查看二进制文件
在从服务器上开启复制功能
change master to master_host='10.77.4.8',master_user='repl',master_password='LSzhYccfwVtReKY9',master_log_file='mysql-bin.000002',master_log_pos=876;
开启复制功能
mysql>start slave;
杂项:
-
根据报警找出出错的记录:
/usr/local/mysql/bin/mysqlbinlog -v --stop-position=156190985 /data/mysql/datafile/mysql-bin.000006 > /data/f.log
cat /data/f.log | awk '/end_log_pos 156190985/ {print NR}'
cat /data/f.log | awk 'NR==3989111,NR==3989131'
-
限定只同步哪张表 .% 表示忽略数据不一致的错误
replicate_wild_do_table=pgenius.% --slave 的my.cnf中配置
replicate_wild_do_table=pgznty.% --slave 的my.cnf中配置
-
跳过报错
1.跳过指定数量的事务:
mysql>stop slave ;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务
mysql>slave start
2.修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误
vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146,1032 #跳过指定error no类型的错误
#slave-skip-errors=all #跳过所有错误