一 安装mysql
mysql官网下载mysql的red hat linux安装包
下载地址为:http://dev.mysql.com/downloads/mysql/5.5.html#downloads
下载后的文件为:MySQL-5.5.53-1.el7.x86_64.rpm-bundle.tar
解压 tar 包 :tar -xvf MySQL-5.5.53-1.el7.x86_64.rpm-bundle.tar
移动所有的rpm包到mysql目录下 :mkdir mysql; mv *.rpm ./mysql
安装mysql 只需要安装 mysql-server和mysql-client包即可
使用命令安装 :rpm -ivh MySQL-server-5.5.53-1.el7.x86_64.rpm 抛出异常:
[root@localhost mysql]# rpm -ivh MySQL-server-5.5.53-1.el7.x86_64.rpm
warning: MySQL-server-5.5.53-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
libaio.so.1()(64bit) is needed by MySQL-server-5.5.53-1.el7.x86_64
libaio.so.1(LIBAIO_0.1)(64bit) is needed by MySQL-server-5.5.53-1.el7.x86_64
libaio.so.1(LIBAIO_0.4)(64bit) is needed by MySQL-server-5.5.53-1.el7.x86_64
net-tools is needed by MySQL-server-5.5.53-1.el7.x86_64
说明安装mysql 需要 libaio和net-tools库还有perl库 下载这三个库 安装
如果linux已联网 可以直接使用yum安装
yum install libaio;
yum install net-tools
yum install perl;
如果想把rpm包下载下来保存 可以使用命令 yum install libaio --downloadonley --downloaddir=保存下载包的目录
安装完成检测下 是否安装成功
[root@localhost mysql]# rpm -qa | grep net-tools
net-tools-2.0-0.17.20131004git.el7.x86_64
[root@localhost mysql]# rpm -qa | grep libaio
libaio-0.3.109-13.el7.x86_64
有时centos中默认已安装了 数据库mariadb 是mysql的一个分支 需要预先卸载才能安装
查找 该数据库
[root@localhost mysql]# rpm -qa | grep mariadb
mariadb-libs-5.5.44-2.el7.centos.x86_64
卸载:rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodeps
接下来 安装就一路ok了
rpm -ivh MySQL-server-5.5.53-1.el7.x86_64.rpm (如果按照过程中存在警告不安装 可以添加
--force 强制安装)
安装过程中会存在一个警告:
warning: user mysql does not exist - using root
warning: group mysql does not exist - using root
一般安装mysql步骤 最好新建一个mysql组 和一个mysql用户 mysql用户属于mysql组 如果没有 默认使用root用户
rpm -ivh MySQL-client-5.5.53-1.el7.x86_64.rpm
安装完成后 启动mysql : service mysql start
默认mysql没有密码 可以登录
mysql -uroot
修改密码:
use mysql;
update user set password=password('root'); //或者 set password=password('密码');
flush privileges;
即可
二 配置mysql主从复制
原理:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events );
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。
1.mysql的初始化文件:
mysql5.5.53默认通过/etc/rc.d/init.d/mysql脚本中设置的参数设置数据目录 ,端口等其他信息
可以通过 ps -ef | grep mysql 查看一些基本参数 数据目录:--datadir=/var/lib/mysql 端口:--port=3306
[root@localhost init.d]# ps -ef | grep mysql
root 11408 1 0 01:26 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/localhost.localdomain.pid
mysql 11698 11408 0 01:26 pts/0 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/localhost.localdomain.err --pid-file=/var/lib/mysql/localhost.localdomain.pid
--socket=/var/lib/mysql/mysql.sock --port=3306
root 11818 2583 0 01:53 pts/0 00:00:00 grep --color=auto mysql
如果在etc目录下存在 my.cnf文件默认会从这个文件中读取
可以从 /usr/share/mysql/my-large.cnf 拷贝一个文件到/etc目录
cp /usr/share/mysql/my-large.cnf /etc/my.,cnf [该文件可以修改默认的字符集等一系列参数(参数名称可以通过 登录mysql后 show variables 查看)]
拷贝该文件后 默认mysql启动了二进制日志 log-bin=mysql-bin 将server-id=某个数字
2.配置主从复制
比如存在如下服务器【主从服务器都需要设置 上面红色的log-bin和server-id】
master 192.168.117.131
slave 192.168.117.132 [从服务器可以配置多台]
1》 配置主服务器
从服务器要从主服务器同步数据 必须先给一个有权限的账号给从服务器连接
主服务器 创建账号:
grant replication slave on *.* to 'slave'@'192.168.117.132' identified by 'test';
显示下主服务器日志(这里文件名称和位置需要在从服务器设置 当主服务器数据修改后file和position都有可能修改 从服务器自动读取更新)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000012 | 529 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
2》 配置从服务器【从服务器都需要设置 上面红色的log-bin和server-id】
首先在从服务器上看下 是否能用主服务器创建的账号登录 因为有可能会有防火墙阻止
mysql -uslave -ptest -h192.168.117.131
如果能登陆 表示可以连接主服务器 连接不上 关闭主服务器防火墙 或者 iptables --flush
从服务器登录
mysql -uroot -proot
设置主服务器信息
change master to
master_host='192.168.117.131',
master_user='slave',
master_password='test',
master_log_file='mysql-bin.000012',
master_log_pos=529 ;
启动(注意 看pid是否已经设置了 show variables like 'server-id') 如果为0 修改my.ini中server-id参数
start slave
测试
在主服务器创建数据库和表 在从服务器检测 如果存在则复制成功
3. 出现数据不同步解决方案
1》查看 slave的状态:
show slave status G
列表中两个状态非常重要
Slave_IO_Running: Yes
Slave_SQL_Running: No
Yes表示正常,No表示异常
Slave_IO线程负责把主库的bin日志(Master_Log)内容,抄写到从库的中继日志上(Relay_Log)。
Slave_SQL线程负责把中继日志上的语句在从库上执行一遍。
假设 Master存在一个数据库 test 从数据库没有这个数据库 开启主从复制后 在master中删除了test数据库 从数据库因为没有该数据库
所有抛出异常 Slave_SQL_Running: No 因为一旦出现错误 表示主从不同步了 如果继续同步会导致更多错误 所以同步会自动停止
2》设置重新同步
stop slave
重新设置主服务器信息master_log_file和master_log_pos 设置为 show master status中的记录即可
change master to
master_host='192.168.117.131',
master_user='slave',
master_password='test',
master_log_file='mysql-bin.000012',
master_log_pos=529 ;