1安装mysql
1 )删除低版本的mysql服务
rpm -e - -nodeps mysql-server mysql
rm -rf /etc/my.cnf
rm -rf /var/lib/mysql/*
2)新版本的mysql的安装、初始密码设置、登录和退出数据库
rpm -q mysql-server mysql (确定是未安装状态,因为要安装新版本的)
ls
MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
tar -xf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar (解包)
ls能查看到好多.rpm包
rpm -Uvh MySQL-*.rpm (升级安装所有的rpm包)
service mysql start (启动服务,新版本不加d)
cat /root/.mysql_secret (别忘.了,查看装服务时生成的默认密码)
mysql -uroot -p默认密码 + 回车 (用默认密码登录到服务器,再改密码)
mysql> set password for root@"localhost"=password("新密码"); 设置密码
mysql>quit 退出登录数据库服务器
mysql -uroot -p新密码 用新密码重新登录数据库
mysql -uroot -p密码 + 库名; 登录后就直接进入该库
3)安装mysql后的配置文件
/var/lib/mysql 数据库目录
/etc/my.cnf 数据库主配置文件
/root/.mysql_secret 初始默认密码文件
4)登录数据库后,对库的操作:查看库,查看当前所在库,切换库,创建库,删除库
show databases; 查看库,显示当前已有的库
use 库名; 切换到该库
select database(); 查看当前所在库
create database 数据库名; 创建数据库
drop database 数据库名; 删除库
5)数据库里表的操作:在库里查看所列的所有表,查看表结构,查看某表的所有记录内容,查看某表指定字段的记录内容,在当前库中创建表,在指定库中创建表,删除当前库的表,删除其他库的表,删除表中所有内容,删除表中某个字段内容
show tables; 看当前库的表名
desc 表名; 查看表结构
select * from 表名(\G); 查看该表所有列的内容
select 列名1,列名2,列名N,…… 表名; 查看表中指定列的内容
create table 表名 (字段名 类型() 约束条件); 在当前库中创建表
create table 库名.表名 (字段名 类型( ) 约束条件); 在指定库中创建表
drop table 表名; 删除当前库的表
drop table 库名.表名; 删除其他库的表
delete from 表名 where 字段名=……; 删除表中某个字段某行的内容
delete from 表名; 删除表中所有内容,不是删除表
2 mysql的数据类型
1)字符类型
如:工作单位、姓名等
char 定长 (0-255)
varchar 变长(255-65535)
2)数值类型(又包括整数型和小数型)如:升高、体重等
整数型:(又分为:微小整数、小整数、中整数、大整数(INT重点)、极大整数)
小数型(FLOAT和DOUBLE)
float 4字节 单精度浮点型数
double 8字节 双精度浮点型数
float(N,M) (N:数的总的位数,M:小数位的位数)
float(4,2) 表示的数的范围是:-99.99到99.99之间范围的数
float(7,2) 表示的数的范围是:-99999.99到99999.99范围的数
3)日期时间类型(如:生日、入职时间等)
创建日期时间类型的表时,给字段赋值时候,下列的字段名和对应的格式必须要位数对应一致。
year 如:2015
date 如:2015-06-02
time 如:17:15:20
datetime 如:2015-06-02 17:30:00
获取系统时间/年/月/日/时间
select now (); 获取系统时间
select year (now()); 获取系统时间中的年份
Select month (now()); 获取系统时间中的月份
select day (now()); 获取系统时间中的日
select time (now()); 获取系统时间中的时间
4)枚举类型:字段的值只能在列举的范围内选择。
enum (值1,值2,……,值N) 选择列举范围内一个
set (值1,值2,……,值N) 选择列举范围内一个或多个
约束条件和default默认值
限制如何给字段赋值,创建表时若不设置就使用mysql建表时的默认设置(NULL/null),在不设置约束条件时,默认允许字段内容为空NULL/null。
create table 表名 (字段名varchar(15) not null); 不允许字段为空
insert into 表名 values (null); 给表赋空值
insert into 表名 values ("null"); 这个不是赋空值,这个null时普通字符
insert into 表名 values (""); 这个也不是赋空值,这个是空格
select * from 表名 where 字段名 is null/NULL 查询字段名空值
default默认值
当向表中插入新的记录时,若不给字段赋值,就使用默认值给字段赋值,建表时若没有设置字段的默认值是什么,mysql把字段的默认值设置为空。设置default值要与对应类型匹配。
mysql> create table biao2(
-> name varchar (5),
->age int (3) default 21,
->sex enum (“boy”,”girl”) default “girl”
-> );
3 mysql表的增删该查
1)添加字段
添加一个新字段: (默认添加到表的最下方)
alter table 表名 add 字段名 类型(宽度) 约束条件;
添加多个新字段: (默认添加到表的最下方)
alter table 表名 add 字段名1 类型(宽度) 约束条件,add 字段名2 类型(宽度) 约束条件,…;
在指定字段名下方添加字段: (after 指定字段名)
alter table 表名 add 字段名 类型(宽度) 约束条件 after 指定字段名;
在所有字段名上方(首位)添加字段: ( first)
alter table 表名 add 字段名 类型(宽度) 约束条件 first;
2)删除字段
删除一个字段:
alter table 表名 drop 字段名;
删除多个字段:
alter table 表名 drop 字段名1,drop 字段名2,……;
mysql> alter table biao1 drop age;
mysql> alter table biao1 drop age,drop love;
3)修改已有字段类型:
alter table 表名 modify 字段名 新类型(宽度) 约束条件;
mysql> alter table biao1 modify id smallint (5);
4)修改字段名:change 修改字段名的同时也可根据需要修改类型(宽度),约束条件等。
alter table 表名 change 原字段名 新字段名 类型(宽度) 约束条件
5)修改表名:rename
alter table 旧表名 rename 新表名;
如:
mysql> alter table biao1 rename xinbiao;
6)复制表及内容
create table 新表名 select * from 要复制的原表名;
如:
mysql> create table xinbiao2 select * from xinbiao;
7)只复制表的结构,不复制内容,得到空表
create table 新表名 select * from 原表名 where 任意一个字段名 is null;
mysql> create table xinbiao3 select * from xinbiao where name is null;
mysql的索引
1设置字段的index索引
1)把原有表已有字段设置为index索引
create index 索引名 on 表名(字段名);
如:mysql> create index name on biao1 (name);
2)创建新表时把字段设置为index索引
如:
mysql> create table biao2 (
-> name varchar (5),
-> age int (3),
-> sex enum("girl","boy"),
-> index (name),
-> index (age)
-> );
3)查看字段的index索引
show index from 表名;
如:mysql> show index from biao2;
4)删除字段的index索引
drop index 索引名 on 表名;
mysql> drop index name on biao2;
2创建unique索引:一般把索引名设置成和字段名相同
1)在已有表中创建unique索引:
create unique index 索引名 on 表名(字段名);
如:mysql> create unique index name on biao3 (name);
2)创建新表时创键unique索引:
如:
mysql> create table biao4 (
-> id int (3),
-> name varchar (5),
-> age int (3),
-> sex enum("girl","boy"),
-> unique (id),
-> unique (name)
-> );
3)查看/删除unique索引和查看/删除index索引的命令一样
查看字段的unique索引:
show index from 表名;
如:mysql> show index from biao4;
4)删除字段的unique索引
drop index 索引名 on 表名;
如:
mysql> drop index name on biao4;
3 创建主键索引 primary key
1)在已有表中创建主键索引:
alter table 表名 add primary key(字段名);
如:
mysql> alter table biao4 add primary key (name);
2)创建新表时创建主键索引:
mysql> create table biao5 (
-> id int (2),
-> name varchar (6),
-> age int (3),
-> sex enum("gril","boy"),
-> primary key (id)
-> );
另一种形式也可:
mysql> create table biao6 (
-> id int (4),
-> name varchar (6) primary key,
-> age int (2)
-> );
3)查看主键primary key
通过 :desc 表名,查看有PRI的标志即是主键。
4)删除主键primary key
alter table 表名 drop primary key;
mysql> alter table biao5 drop primary key;
5)主键与auto_increment连用,使字段自动增长,每次都自加1
mysql> create table biao9 (
-> id int (2) primary key auto_increment,
-> age int (3),
-> name varchar (5),
-> sex enum("boy","girl")
-> );
6)删除自动增长的主键,必须先去掉自动增长
去掉自动增长:
alter table 表名 modify 字段名 ……;后面的根据需要修改,不加auto_increment
如:alter table t29 modify id int(2) not null;
再删除主键:
alter table 表名 drop primary key;
如:alter table t29 drop primary key;
7)添加的字段让其直接指定添加在首位并让他自动增长
alter table 表名 add 字段名 类型(宽度) primary key auto_increment first;
如:
mysql> alter table biao10 add id int (2) primary key auto_increment first;
4存储引擎的查看、创建、修改
1)查看表的存储引擎(在创建表的过程中查看)
mysql> show create table 表名;
如:mysql> show create table biao10;
2)创建新表时设置存储引擎为myisam并设置成支持汉语(例子1,初认识)
mysql> create table biao11(
-> name varchar (5),
-> age int (2)
-> )engine=myisam default charset=utf8;
创建新表时设置存储引擎为myisam并设置成支持汉语(例子2,更完善)
mysql> create table biao12 (
-> 姓名 varchar(20),
-> 年龄 int(5),
-> 性别 enum("男","女")
-> )engine=myisam default charset=utf8;
3)修改表的存储引擎(和设置支持语言)
mysql> alter table 表名 engine=存储引擎类型;
mysql> alter table 表名 engine=存储引擎类型 default charset=语言类型;
5外键:foreign key
让当前表中外键字段的值,只能在指定的另一个表的某个字段值的范围内选择。两个表相互关联。
外键使用规则:
1)表的存储引擎必须是innodb
2)字段的类型要匹配
3)被参考字段必须是键值中的一种,通常设置为主键
创建员工信息表(父表)和员工工资表(子表),子表中设置外键,使子表和父表成为关联表,有员工信息加入员工信息表时才能给员工发工资,否则不能发,当员工信息表的编号改变时,员工工资表的编号自动跟着改变,当员工信息表内容删除后,员工工资表内容也自动删除,删除父表时,需要先删除外键,才能删除父表,否则不可以。
1)创建员工信息表和员工工资表,并给员工信息表里的员工的对应的工资表赋值
mysql> create table yg_info(
-> yg_id int (2) primary key auto_increment,
-> name varchar (10)
-> );
mysql> create table yg_gz (
-> gz_id int (2) not null,
-> gz float (7,2),
-> foreign key (gz_id) references yg_info (yg_id) on update cascade on delete cascade
-> );
修改默认的存储引擎:
vim /etc/my.cnf
[mysqld]
default-storage-engine=myisam/innodb 添加(修改成需要的存储引擎)
wq
/etc/init.d/mysql restart 重启服务
数据导入:把系统文件的内容保存到数据库服务器的表里:
load data infile“要导入的文件” into table 数据库.表名 fields terminated by":" lines terminated by "\n";
数据导出:把数据库表里记录保存到系统文件里:
select * from 数据库.表名 into outfile '导出文件的存放位置';
表记录的基本操作(增、删、改、查)
1)查(select)(查询全部记录和查询指定字段记录)
select 字段名列表 from 表名 where 条件表达式;
select * from usertab where uid=0;
select username,shell,uid from usertab where uid in (10,0,500);
select username,shell,uid from usertab where uid between 10 and 20;
select username,uid from usertab whereusername="root" or uid=0 or shell="/bin/bash";
select username from usertab where username like '__ _';
select username from usertab where username regexp '[0-9]';
2)update 改(单个修改和批量修改)
批量修改:
update 数据库名.表名 set 字段名1=值1,字段名2=值2,……;
3)删除:delete
删除时以行为单位,删除的是整条记录。
删除所有记录:
或delete from 数据库.表名;
删除指定记录:
delete from 数据库.表名 where 条件表达式;
4)添加记录:insert
给指定字段赋值:
insert into 表名(字段名1,字段名2,……)values(值1,值2,……);
给所有字段赋值:
insert into 表名 values(值1,值2,……)
5)select查询时排序:order by asc(默认):升序 desc:降序
升序排列:
select 字段名1,字段名2,… from 表名 order by 某字段 asc;
降序排列:
select 字段名1,字段名2,… from 表名 order by 某字段 desc;
查询时分组: group by 字段名
select 某字段名 from 表名 group by 该字段名;
查询时limit 限制显示记录的条目数
select 字段名1,字段名2,…… from 表名 limit N,M;
select * from 表名 limit N,M;
1知道旧密码时,修改数据库管理员密码(在命令行下操作)
[root@svr5 /]# mysqladmin -hlocalhost -uroot -p password 新密码
输入旧密码后,回车即可
2不知道旧密码时,恢复数据库管理员初始默认密码后再设置新密码
service mysql stop 停止服务
service mysql start --skip-grant-table 跳过授权表登录
mysql 登录
mysql> select user,host,password frommysql.user; 查看保存密码的表mysql.user
mysql> update mysql.user
-> set password=password("tarena")
-> where host="localhost"; 设置新密码
mysql> flush privileges; 更新手动设置的密码
quit
mysql -uroot -ptarena 退出后用新密码重新登录
3数据库的授权和撤销授权:在登录服务器状态下进行
grant 权限列表 on 数据库名.表名 to 用户名@”客户端地址”;
grant 权限列表 on 数据库名.表名 to 用户名;
grant 权限列表 on 数据库名.表名 to 用户名@”客户端地址” indentified by “密码” with grant option;
grant all on *.* to root@"192.168.4.205" identified by "123" with grant option;
grant all on *.* to jim@"192.168.4.%";
grant all on *.* to jim;
revoke 权限列表 on 数据名.表名 from 用户名@”客户端地址”;
revoke delete on *.* from root@”192.168.4.205”;
4在命令行下:完全备份和恢复:(mysqldump命令,在命令行下执行完全备份,必须以.sql结尾)
mysqldump -u用户名 -p密码 要备份的数据库名 > xx.sql (备在当前目录)
mysqldump -u用户名 -p密码 要备份的数据库名 > 目录路径/xx.sql (备在指定目录)
mysqldump备份时要注意:备份一个库还是多个库
数据库名 备份数据库服务器上的某个库的某个表的所有数据
-B 数据库名1 数据库名2 … 备份数据库服务器上的某几个库的所有数据
一般情况下,备份一个库时,xx.sql里没有create database,需要指定数据库名;
备份多个库时,xx.sql里有create database,不能指定数据库名。
数据恢复(两种格式,加数据库名和不加数据库名)
加数据库名:当备份文件xx.sql里没有createdatabase的sql语句时,恢复数据时要指定数据库名
不加数据库名:当备份文件xx.sql里有create database的sql语句时,恢复数据时,不能指定数据库名
mysql -u用户名 -p密码 数据库名 < 目录路径/xx.sql
mysql -u用户名 -p密码 < 目录路径/xx.sql
binlog日志记录sql语句
1启用binlog日志 日志的存储位置:默认在:/var/lib/mysql/
vim /etc/my.cnf
[mysqld]
log-bin 添加
wq
2 binlog日志记录sql语句的方式 (字符偏移量(pos)和时间点(time))
通过字符偏移量查看binlog日志:
mysqlbinlog - -start-position=1022 - -stop-position=2086 svr5-bin.000001
mysqlbinlog - -stop-position=2086 svr5-bin.000001
mysqlbinlog svr5-bin.000001
通过时间点方式查看binlog日志:
mysqlbinlog - -start-datetime=”yyyy-mm-dd hh:mm:ss” svr5-bin.000001
mysqlbinlog - -stop-datetime=”yyyy-mm-dd hh:mm:ss” svr5-bin.000001
执行binlog日志里的sql语句恢复数据
mysqlbinlog 选项 svr5-bin.000001 | mysql -uroot -p123 [数据库名]
3手动生成binlog日志的方式
1)重启数据库服务,可以生成新的binlog日志,service mysql restart
2)在登录mysql状态下,生成新的binlog日志: mysql>flush logs;
每执行一次就生成一个新的binlog日志
3)在命令行下生成新的binlog日志:
mysql -uroot -p123 -e “sql命令”如:mysql -uroot -p123 -e “flush logs”
4)完整备份数据后又让它生成新的binlog日志
命令行下:mysqldump -uroot -p123 - -flush-logs 数据库名 > xxx.sql
4删除已有的binlog日志文件
1)删除所有的binlog日志文件,恢复到最初的编号000001, xx.00000x和xx.index同步更新:
mysql>reset master;
2)删除指定binlog日志编号之前的所有binlog日志(xx.00000x和xx.index同步更新):
mysql> purge master logs to “某编号的binlog日志”
如:mysql>purge master logs to “svr5-bin.000004”; (000004编号之前的全删了)
3)手动删除binlog日志:xx.00000x和xx.index不同步,需把这两种类型文件都删除。
如:rm -rf svr5-bin.000004后, svr5-bin.index不会跟着一块删
xtrabackup软件备份
xtrabackup软件的安装
[root@svr5 opt]# rpm -ivhpercona-xtrabackup-2.1.6-702.rhel6.x86_64.rpm
有依赖包,用yum把依赖包安上
完整备份:
[root@svr5 ~]# xtrabackup_56 - -backup - -datadir=/var/lib/mysql/
- -target-dir=/xbackupdir
第一次增量备份:
[root@svr5 db1]# xtrabackup_56 - -backup - -datadir=/var/lib/mysql/
- -incremental-basedir=/xbackupdir - -target-dir=/xbackupdirnew1
第二次增量备份:
[root@svr5 xbackupdirnew1]#xtrabackup_56 - -backup - -datadir=/var/lib/mysql/
--incremental-basedir=/xbackupdirnew1 --target-dir=/xbackupdirnew2
完全恢复:
[root@svr5 xbackupdirnew2]#xtrabackup_56 - -prepare - -datadir=/var/lib/mysql/ - -target-dir=/xbackupdir
[root@svr5 xbackupdir]# cp/xbackupdir/db1/biao1.ibd /var/lib/mysql/db1/
第一次增量恢复:
[root@svr5 xbackupdir]# xtrabackup_56 - -prepare - -datadir=/var/lib/mysql/
- -target-dir=/xbackupdir - -incremental-dir=/xbackupdirnew1/
[root@svr5 xbackupdir]# cp/xbackupdir/db1/biao1.ibd /var/lib/mysql/db1/
第二次增量恢复:
[root@svr5 xbackupdir]# xtrabackup_56 - -prepare - -datadir=/var/lib/mysql/
- -target-dir=/xbackupdir - -incremental-dir=/xbackupdirnew2
[root@svr5 xbackupdir]# cp /xbackupdir/db1/biao1.ibd /var/lib/mysql/db1/
mysql的主从配置,使得192.168.4.5服务器和192.168.4.205服务器互为主从结构
主mysql服务器上(192.168.4.5上)
[root@svr5 ~]# vim /etc/my.cnf
[mysqld]
log-bin (添加,开启binlog日志,后面跟值不跟都可)
server_id=5 (添加,指定自己的server_id值,多少随便)
log_slave_updates (添加,链接复制功能,根据需要决定是否添加)
从mysql服务器上(192.168.4.205上)
[root@pc205 ~]# vim /etc/my.cnf
[mysqld]
log-bin (添加,开启binlog日志,后面跟值不跟都可)
server_id=205 (添加,指定自己的server_id值,多少随便)
log_slave_updates (添加,链接复制功能,根据需要决定是否添加)
vim /shell/allbak.sh 写完全备份脚本
vim /shell/zengliang.sh 写增量备份脚本
只备份新生成的和没备份的,binlog日志里正在使用的不备份
mysql-mmm软件
用mysql-mmm部署mysql服务器的虚拟IP,配合主从同步,搭建mysql高可用集群
1做192.168.4.5和192.168.4.205互为主从,并让192.168.4.100和192.168.4.200做192.168.4.205的从,注意要在192.168.4.205上开启齐连复制功能log_slave_updates
5台机器的公共配置:
关闭iptables
关闭selinux
配置yum源
能互相ping通
都运行mysql都只有默认的4个库
192.168.4.5上:
安装高版本的mysql服务器:
tar - xf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
rpm -Uvh MySQL-*
vim /etc/my.cnf
log-bin (添加)
server_id=5 (添加)
service mysql start
cat /root/.mysql_secret
# The random password set for the rootuser at Thu Jun 11 03:45:11 2015 (local time): JpytK7mI
mysql -uroot -pJpytK7mI
mysql> set password for root@"localhost"=password("123");
mysql -uroot -p123
mysql> show master status;
+-----------------+----------+--------------+------------------+-----------
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-----------
| svr5-bin.000001 | 262 | | | |
+-----------------+----------+--------------+------------------+-----------
mysql> grant replication slave on *.* to slaveuser@"%" identified by "123";
192.168.4.205上:
tar -xf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
rpm -Uvh MySQL-*.rpm
vim /etc/my.cnf
log-bin (添加)
server_id=205 (添加)
log_slave_updates (添加)齐连赋值功能
service mysql start
cat /root/.mysql_secret
# The random password set for the rootuser at Thu Jun 11 03:46:06 2015 (local time): lHPQXkE3
mysql -uroot -plHPQXkE3
mysql> set password for root@"localhost"=password("123");
[root@pc205 ~]# mysql -uroot -p123
mysql>change master to
master_host="192.168.4.5",master_user="slaveuser",master_password="123",
master_log_file="svr5-bin.000001",master_log_pos=262;
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> grant replication slave on *.* to slaveuser@"%" identified by "123";
mysql> show master status;
+------------------+----------+--------------+------------------+----------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB| Executed_Gtid_Set |
+------------------+----------+--------------+------------------+----------
| pc205-bin.000001 | 668 | | | |
+------------------+----------+--------------+------------------+----------
再在192.168.4.5上:
mysql>change master to
master_host="192.168.4.205",master_user="slaveuser",master_password="123",
master_log_file="pc205-bin.000001",master_log_pos=668;
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
192.168.4.100上:(4.205的从)
tar -xf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
rpm -Uvh MySQL-*.rpm
vim /etc/my.cnf
server_id=100 (添加)
log-bin (添加,也可不添加)
service mysql start
cat /root/.mysql_secret
# The random password set for the rootuser at Thu Jun 11 04:27:40 2015 (local time): JOPLJQAT
mysql -uroot -pJOPLJQAT
mysql> set password for root@"localhost"=password("123");
mysql -uroot -p123
mysql>change master to
master_host="192.168.4.205",master_user="slaveuser",master_password="123",
master_log_file="pc205-bin.000001",master_log_pos=668;
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
192.168.4.200上:(4.205的从)
tar -xf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
rpm -Uvh MySQL-*.rpm
vim /etc/my.cnf
server_id=200 (添加)
log-bin (添加,可不添加)
service mysql start
cat /root/.mysql_secret
# The random password set for the rootuser at Thu Jun 11 04:29:12 2015 (local time): M9bQrRDJ
mysql -uroot -pM9bQrRDJ
mysql> set password for root@"localhost"=password("123");
mysql -uroot -p123
mysql>change master to
master_host="192.168.4.205",master_user="slaveuser",master_password="123",
master_log_file="pc205-bin.000001",master_log_pos=668;
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
2在所有的机器上安装mysql-mmm软件(所有机器都做相同的操作)
规划: 主主数据库服务器(192.168.4.5和192.168.4.205)使用的虚拟IP:192.168.4.99 (写的虚拟IP)另外两台读的虚拟ip如下:
192.168.4.201 read , 192.168.4.202 read
tar -zxf mysql-mmm.tar.gz
1)安装编译程序和perl程序:
yum -y install gcc make gcc-c++
yum -y install *perl*
2)安装mysql-mmm依赖的软件包:
Algorithm-Diff-1.1902.tar.gz
Net-ARP-1.0.8.tgz
perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
Proc-Daemon-0.03.tar.gz
tar -zxf Algorithm-Diff-1.1902.tar.gz
cd Algorithm-Diff-1.1902
perl Makefile.PL
make && make install
gzip -d Net-ARP-1.0.8.tgz
tar -xf Net-ARP-1.0.8.tar
cd Net-ARP-1.0.8
perl Makefile.PL
make && make install
rpm -ivh perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
tar -zxf Proc-Daemon-0.03.tar.gz
cd Proc-Daemon-0.03
perl Makefile.PL
make && make install
3)安装mysql-mmm
tar -zxf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
上面操作可以写成一个脚本:在其他机器上一次执行脚本即可,都要安装mysql-mmm
3 在所有的机器上配置主机名映射(所有机器做相同的操作)
vim /etc/hosts
192.168.4.250 monitor.tarena.com monitor
192.168.4.5 master5.tarena.com master5
192.168.4.205 master205.tarena.com master205
192.168.4.100 slave100.tarena.com slave100
192.168.4.200 slave100.tarena.com slave200
4 在所有的机器上编辑配置文件: /etc/mysql-mmm/mmm_common.conf
5所有被监控的mysql服务器上都要编辑配置文件/etc/mysql-mmm/mmm_agent.conf
(监控那台设置虚拟IP的机器不需要编辑)
192.168.4.5上:
vim /etc/mysql-mmm/mmm_agent.conf
this master5 (添加,指定自己的主机名)
192.168.4.205上:
vim /etc/mysql-mmm/mmm_agent.conf
this master205
192.168.4.100上:
vim /etc/mysql-mmm/mmm_agent.conf
this slave100
192.168.4.200上:
vim /etc/mysql-mmm/mmm_agent.conf
this slave200
6 在4台mysql服务器上授权有监视权限的和代理权限的用户(4台做下面同样的操作)
mysql> grant replication client on *.* to monitor@"%" identified by "monitor";
mysql> grant replication client on *.* to agent@"%" identified by "agent";
7 在监控服务器上(mysql-mmm)删编辑配置文件/etc/mysql-mmm/mmm_mon.conf
(其他mysql服务器不需要配置)
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 192.168.4.250 (监控服务器的IP)
pid_path /var/run/mmm_mond.pid (pid号,默认)
bin_path /usr/lib/mysql-mmm/ (命令所在路径,默认)
status_path /var/lib/misc/mmm_mond.status (状态所在路径,默认)
ping_ips 192.168.4.5,192.168.4.205,192.168.4.100,192.168.4.200
(要监控的机器的IP)
</monitor>
<host default>
monitor_user monitor (有监视权限的用户名,之前授权设置的)
monitor_password monitor (有监视权限的密码,之前授权设置的)
</host>
debug 0 (值为1表示输出调试信息,为0表示不输出调试信息)
8 在对应角色服务器上启动对应的服务
启动所有mysql服务器上的代理进程:
192.168.4.5上:
/etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Can't locateDBI.pm in @INC (@INC contains:………如果有依赖包,装不上,就先在光盘里查出该依赖包,装上后再启动
/mnt/Packages/ | grep -i dbi
perl-DBI-1.609-4.el6.x86_64.rpm
perl-DBIx-Simple-1.32-3.el6.noarch.rpm
yum -y install perl-DBI
/etc/init.d/mysql-mmm-agent start
netstat -anptu | grep :9989
192.168.4.205上:
/etc/init.d/mysql-mmm-agent start
192.168.4.100上:
/etc/init.d/mysql-mmm-agent start
192.168.4.200上:
/etc/init.d/mysql-mmm-agent start
启动监控主机上的监控进程
192.168.4.250上:
/etc/init.d/mysql-mmm-monitor start
验证:有没有把虚拟IP部署上
在监控服务器上验证:
mmm_control show 查看各机器状态
mmm_control set_online master5 激活该角色机器
mmm_control set_online master205
mmm_control set_online slave100
mmm_control set_online slave200
mmm_control show 虚拟IP部署在了4.5上
当192.168.4.5机器故障时,虚拟IP会自动部署在192.168.4.205上
mmm_control set_offline master5
mmm_control show 虚拟IP自动部署在192.168.4.205上
到192.168.4.205上查看是否有虚拟IP:ip addr show 能查看成功,说明部署成功