Linux - mysql基础语法(李作强)

数据库的四个特性(ACID):
1)原子性(A):整个事物中的所有操作,要么完成,要么全部不完成,不能停留在某个细节,在执行中发生错误,会被回滚到事物最开始状态,就行事物没发生过一样。
2)一致性(C):一个事务可以封装状态改变,事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
3)隔离性(I):是指两个以上的事务不会出现交错执行的状态,因为这样可能会导致数据不一致。
4)持久性(D):在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
事物:一般是指要做或者所做的事情。
多人操作同一条数据,会产生死锁或者锁等待。
行级锁:MySQL中粒度最小的一种锁,他能减少数据库操作的冲突

解决死锁的三种方法:
1)逐个杀死进程
2)脚本杀死进程
3)重启数据库,重启服务器

回滚(Rollback):程序或者数据发生错误,将程序或者数据恢复到上一次正确的状态的行为。
redo(提交日志):忽略未完成的事务并重复已提交事务所做的改变
undo(回滚日志):在恢复时消除未完成事务的影响并忽略已提交事务。
Engine(存储引擎):mySAM & InnoDB
mySAM :处理速度快,但是不支持事物,不能回滚
InnoDB : 支持事物,支持行级锁,支持外键,处理小数据是比mySAM慢,处理大数据还可以,能回滚
NDB:给cluster集群用的引擎
SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL),事务控制语言(TCL)。

安装MySQL
要把所有关于MySQL的进程和程序包和用户名全部杀死,删除。
解压安装包。
运行安装包里的install脚本。
编辑配置文件:/etc/my.conf

查询指定记录,where关键字
select 字段名1,字段名2,… from 表 where 查询条件; //按条件查询

MySQL字符集
查看字符集的设置
show variables like ‘character_set_%’;
查看字符集排序设置
show variables like ‘collation_%’;
修改MySQL字符集(变成中文)
vim /etc/my.cnf
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
character-set-filesystem = utf8 //如果想要都是utf8,文件系统也可设置
[mysql]
default-character-set=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES //找到这行注释。
查看数据库编码:
show create database 库名;
查看表编码:
show create table 表名;
查看字段编码:
show full columns from 表名;
修改服务器级别字符集
a.临时修改
set character_set_server=utf8;
b.永久修改
set global character_set_server=utf8; #第一种方法,但需要退出之后,在进入才可看到改变
第二种方法,但需要重启
vim /etc/mysql/my.cnf
[mysqld]
default-character-set=utf8

权限管理
use mysql; //登录数据库
select * from user \G //查看数据库用户权限信息,\G把表竖起查看。
describe user; // 描述数据库用户权限信息。
select * from db \G //查看数据库库的权限信息。
describe user; //描述数据库库的权限信息。
flush privileges; //刷新用户权限记录
show databases; //查看数据库所有的库。
show tables; //查看库里的所有表
use 库名; //登录超级数据库
mysql所有库权限由以下5个表控制
user:控制用户权限
db:控制数据库权限
host:控制访问主机
tables_priv:控制表权限
columns_priv:控制列权限
mysql> insert into user(host,user,password,ssl_cipher,x509_issuer,x509_subject) values(‘192.168.0.103’,’wml’,password(‘123’),”bolb’,’bolb’.’bolb’); //添加数据库的用户。
update user set select_priv=”Y”; //给用户添加查看权限,“select_priv”是查看的权限。
update user set select_priv=”N” where user=”wml”; //关闭用户的权限。where是抽取条件。
insert into db(host,db,user,select_priv) values(‘192.168.0.103’,’db1’,’wml’,’Y’); //在db中插入“主机”,“数据库名”,“用户名”,“需要修改的权限”。
privileges:特权。
grant:授权。
revoke:撤销。
grant 权限 privileges on 数据库.表名 to 用户名@’可登陆服务器IP’ identified by ‘password (‘密码’)’; //给用户授予权限,密码加密。
grant 权限 on 数据库.表名 to 用户名@’可登陆服务器IP’ identified by ‘password (‘密码’)’; //给用户授权,密码加密。
实例:
grant select,insert on mysql.user to wml@’192.168.0.100’ identified by ‘password (‘123’)’; // 给数据库用户wml,授予查看,插入的权限,并设置密码。
grant all privileges on . to 用户名@’%’ with grant option; //给用户所有权限,包括 grant 权限,全局级别。
grant 权限 on 库名.* to 用户名@’主机范围’; //数据库级别
grant 权限 on 库名.表名 to 用户名@’主机范围’; //表级别
grant 权限(字段名) on 库名.表名 to 用户名@’主机范围’; //字段级别
grant insert(name) on db2.tb1 to wml@’%’; //字段级别的实例。
grant all on . to dba1@’192.168.0.10’ identified by “123”; //给用户所有权限,唯grant权限没有,dba1是用户名,192.168.0.10是主机IP,identified by 设置密码。

用户管理
1)create user 用户名 identified by ‘密码’; //添加用户。
2)grant 权限 on 数据库对象 to 用户@’主机范围’ identified by “密码”; //创建用户,给用户名授权。
3)insert into mysql.user(host,user,password) values(‘主机范围’,’用户名’,password(‘密码’)); //在系统里插入用户,创建用户。
select distinct concat(‘User: ”’,user,”’@”’,host,”’;’) as query from mysql.user; //查看数据库中所有用户
show grants; //查看用户的权限
show grants for 用户名; //查看创建后的授权语句。
select * from mysql.user where user=’用户名’ \G; //查看数据库中某个用户权限
drop user 用户名; //删除用户
delete from mysql.user where user = ‘用户名’; //删除用户
revoke 权限(字段名) on 库名.表名 from 用户名@’主机范围’; //撤销字段级
revoke 权限 on 库名.表名 from 用户名@’主机范围’; //撤销表级
revoke 权限 on 库名.* from 用户名@’主机范围’; //撤销库级
revoke all privileges,grant option from 用户名@’主机范围’; //撤销全局级
revoke all privileges,grant option from 用户1[,用户名2,…]; //撤销全局级

查看,创建,修改,删除数据库
select user(); //查看当前的用户
select database(); //查看当前库
select * from 数据库名.表名; //查看某个表
desc 表名; //描述,查看表
show create table 表名; // 查看创建表的总过程
drop table 表名; //删除表
dropdatabase 库名; //删除库
delete from 表名; //删除所有的表记录
truncate table 表名; //清空表
select count(*) from 表名; //查看数据库的数据量
show table status like ‘%表名%’ \G; //查看表的创建时间,也可以没有百分号。
delete table 表名 where 字段名 = 记录(值) or 字段名 = 记录 ;//删除指定的字段。
delete truncate 区别
delete可以加 where 条件,删除单条或多条记录,如果不加,就是清空所有表内容
truncate不可以加where条件,只能清空表

修改表名的两种方法:
1)alter table 原表名 rename 新表名;
2)rename table 原表名 to 新表名;

创建数据库的三种方法:
1)create database 数据库名;
2)mysqladmin create 数据库名 -uroot -p密码;
3)在数据库外的命令行操作:
# cd /var/lib/mysql/
# mkdir 数据库名
# chown mysql:mysql 数据库名
# chmod 700 数据库名
删除数据库三种模式:
1)drop database 数据库名;
2)mysqladmin drop 数库名 -u root -p密码
3)在数据库外的命令行操作
# cd /var/lib/mysql
# rm -rf 数据库名

创建表
create table 表名(id int(10) iPhone varchar(12) name varchar(10)); //创建表,括号里的是字段和数据类型。
1)insert into 表名(id,iphone,name) values(1 ,’17602285787’,’lzq’); //在表里插入内容,values里是添加的内容,一定要按顺序添加。
2)insert into 表名 set id=18,iphone=’17602285787’,name=’lzq’; //第二种添加表内容的方

alter table 表名 add 字段名 数据类型; //添加字段
alter table 表名 change 原字段名 新字段名 数据类型; //修改字段名
alter table 表名 change 原字段名 新字段名 数据类型; //修改字段名和字段类型
alter table 表名 modify 字段名 数据类型; // 修改字段类型
alter table 表名 drop 字段名; //删除字段名
alter table 表名 add 字段名 数据类型 first; //添加新字段为第一个位置
alter table 表名 add 字段名 数据类型 after 字段名;//after意思是在谁的后面。
alter table 表名 modify 字段名 类型 first; //指定字段在第一的位置。
创建一个空的表,不能传值。
alter table 表名 modify 字段名 类型 null; //让null记录值为yes
alter table 表名 modify 字段名 类型 not null;//让NULL记录值不为YES(空),而为NO。

数据复制,备份,恢复:
show create table 表名;//查看表的创建语句。

复制记录:
insert into 当前表 (字段1,字段2) select 要复制的字段名 from 要复制的表名; //复制表的内容。
实例:首先表的结构必须是一样的,要不然会报错,数据插入不进去。
insert into t3 (name,id) select lower(name),password(lower(name)) from t2; //t3是新建的表,t2是有内容的表,在t2中往t3表中导入数据。

create table 表名(select 字段名 from 表名); //创建并复制表的结构和内容,select 字段名 from 表名是要复制的表。
insert into t1 select * from t2; //把t2表的所有内容复制到t1里

复制单个字段记录:
先创建一个lili表,在lili表中插入内容,在创建一个toto表,用下面的代码课以复制内容,
insert into toto (id,name) select lower(id),lower(name) from lili;
lower:是不区分大小写函数。
创建表tt:
create table tt (id int(11),name char(10),sex char(‘M’,’F’));
insert into tt(id,name,sex) values (1,’ppp’,’M’);
创建表tp:
create table tp(id int(11),name char(10),sex char(‘M’,’F’));
从tt复制记录到tp:
insert into tp (id,name) select lower(id),password(lower(name)) from tt;
password: 是加密函数。

表的备份,恢复
create table 新表(select * from 被复制表); //复制整个表内容
表结构复制
create table 新表(select * from 被复制表 where 5=3); //5=3是自定义的,随便写任何内容,5=3条件不成立复制表结构,1=1条件成立则复制表结构加数据。
复制表中指定字段
create table 新表(select 字段 from 被复制表); //只复制一个字段的内容。
备份表
mysqldump -u用户名 -p密码 数据库名 表名 > 数据库.表.spl // 名子是自义定的,好区分就行。
mysqldump -u root -p密码 数据库名 表1 表2… > /数据库.表.bak //备份多表。
实例:
mysqldump -u root -p db2 t7 > mysql17-12-19.sql //把db2库里的t7表备份出来,没有默认的存储位置需要手动添加路径。
恢复表
mysql -u 用户名 -p 密码 -D 数据库名 < /表文件 //可以不加参数-D,恢复数据的时候不需要添加表名。
实例:恢复表的流程
mysql -u root -p密码 #进入数据库
use db2; #进入db2数据库
drop table t7,t8,t9; #删除t7,t8,t9的表
exit #退出数据库
mysql -u 用户名 -p密码 -D db2 < /db2.t7.t8.t9.bak //恢复表的命令。
在命令行里操作导出整个数据库结构(不包含数据)
mysqldump -h 远程主机IP -u 用户名 -p 密码 -d 数据库名 > 数据库名.sql
实例:
mysqldump -h localhost -uroot -p123456 -d database table > dump.sql
导出单个数据表结构(不包含数据)
mysqldump -h 远程主机ip -u用户名 -p密码 -d 数据库名 表名 > 数据库名.表名.sql
实例:
mysqldump -h localhost -uroot -p123456 -d database table > dump.sql
导出整个数据库数据
mysqldump -h 远程主机ip -u用户名 -p密码 -t 数据库名 > 数据库.sql
实例:
mysqldump -h localhost -u用户名 -p密码 -t 库名 > dump.sql
导出结构+数据
mysqldump -h localhost -u用户名 -p密码 库名 > dump.sql
导出单个数据表结构和数据
mysqldump -h localhost -u用户名 -p密码库名 表名 > dump.sql
备份指定库
mysqldump -u root -p密码 -B 数据库名 > /数据库.sql //-B参数可以不加。
实例:
mysqldump -u root -p密码 -B db2 > /db2.sql
恢复指定库
create database 数据库名; //必须创建数据库名,如果有就覆盖
mysql -u root -p密码 -B 数据库名 < /数据库.bak
备份所有库,包括数据库的系统库
mysqldump -u root -p密码 -A > /数据库.bak
恢复所有库
mysql -u root -p密码 -A < /数据库.bak
mysql -u root -p密码 < /数据库.bak

日志恢复误删除的库或者表
在配置文件中添加选项:
vim /etc/my.conf
[mysqld] //在[mysqld] 行下添加
log-bin = mysql-binlong //添加的一行
重启MySQL服务
查看日志:–no-defaults (外部命令)
mysqlbinlog –no-defaults mysql-bin.00001 //mysql-bin.00001是系统生成的日志名字。
MySQL日志文件的位置: /usr/local/mysql/date

start-position //开始位置点
stop-position //结束位置点
mysqlbinlog –no-defaults –start-position=点位 –stop-position=点位 数据库日志名 (mybin.000001) | mysql -u用户名 -p密码 //通过位置点恢复删除的数据库

–start-datetime //时间开始点
–stop-datetime //时间结束点
mysqlbinlog –no-defaults –start-datetime=点位 –stop-datetime=点位 数据库日志名 (mybin.000001) | mysql -u用户名 -p密码 //通过位置点恢复删除的数据库
时间格式: 17-12-19 11:22:00 命令行固定格式。

查看正在使用的binlog日志文件:
show master status; //查看主
show slave status; //查看从
查看binlog的日志目录:
show variables like ‘datadir’;
查看有哪些binlog文件:
show master logs; //主日志文件
show binary logs; //二进制日志文件
手动清理排除正在使用的二进制文件:
purge binary logs to ‘mysql-tb-bin.000005’; //清除 ‘mysql-tb-bin.000005’ 以外的其他二进制文件。 ‘mysql-tb-bin.000005’是之日文件的名字。
purge master logs to ‘mysql-bin.000020’; //清除’mysql-bin.000020’此文件之上的所有文件。’mysql-bin.000020’是日志文件的名字。
自动清理二进制文件:
vim /etc/my.cnf // 在my.cnf里面加上这个配置
[mysqld] //在这行下面添加条件
expire_logs_days=5 //定期5天清理一次日志文件。

往数据库里导入数据:
先创建一个数据库表,格式要与要导入数据的分割的格式相符合才行。
1)create table tsm(one varchar(255),two varchar(255),three varchar(255),four varchar(255),five varchar(255),six varchar(255),sevev varchar(255)); //创建的数据库表并设定了符合的格式。
2)load data infile ‘/a.txt’ into table 表名 fields terminated by ‘,’ lines terminated by ‘\n’; //导入数据。 ‘/a.txt’ 是文件绝对路径。 ‘,’ 是分隔符。 ‘\n’ 是自动换行。

特别注意: –single-transaction 参数
1.所有备份操作,都会进行隐式锁表,其默认参数为 –lock-all-tables , 备份完成后会自动unlock tables;
2.–single-transaction 参数备份时不锁表 , 与–lock-all-tables & –lock-tables相冲突,不能同时使用,所以调用以下参数会自动关闭这两个参数
3.–single-transaction 因为它不需要锁表 , 主要功能是保持数据的一致性 , 它调用了事物 , 因为事物有4个特性(原子性,一致性,隔离性,持久性) , 所以只对innodb有效
mysqldump -uroot -pmysql 库名 –single-transaction > 库名.sql
//这里只是简单语法,上面的所有备份操作都可以加此参数

开启MySQL慢查询
记录查询时间长的语句就是慢查询,
查询一条数据时间在30秒以内为正常的sql语句。
查询慢的原因:
1)网络的问题
2)语句的问题
3)异地,没有CDN缓存服务器。
解决查询慢的办法:
1)找开发优化sql语句。
2)自己加索引优化,索引功能是加快查询速度。
在配置文件中添加慢查询
vim /etc/my.cnf
[mysqld] //在此行下添加
slow_query_log = 1 //开启慢查询
slow_query_log_file = /usr/local/mysql/data/slow_query.log //慢查询记录的文件
long_query_time = 1 //默认慢查询的时间为1秒
log_queries_not_using_indexes = 1 //记录未使用索引的查询

show variables like ‘%slow%’; //查看MySQL慢查询是否开启 , OFF是关闭状态,ON是开启状态。

show global status like ‘%slow%’; //查看慢查询是否开启

set global slow_query_log=ON; //开启MySQL慢查询功能,ON是开启状态。

show variables like “long_query_time”; //查看MySQL慢查询时间设置,默认10秒
set global long_query_time=5; //修改为记录5秒内的查询
select sleep(6); #测试MySQL慢查询

show variables like ‘log_%’; //查看是否开启log日志。
OFF是关闭的状态。ON是开启的状态。

第三方 xtrabackup 增量备份工具
xtrabackup 是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具MySQL Enterprise Backup(meb)的一个很好的替代品。
xtrabackup 有两个主要的工具:innobackupex和xtrabackup,xtrabackup只能备份InnoDB和XtraDB数据表,innobackupex封装了xtrabackup,可以备份MyISAM数据表。
rpm-安装
1)yum -y install perl-DBD-MySQL.x86_64 perl-Time-HiRes.x86_64
2)rpm -qa | grep perl-DBD
3)rpm -e –nodeps (rpm -qa | grep perl-DBD找出来的结果) //强制删除
4)yum -y install perl-DBD-MySQL.x86_64
5)wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.3/binary/redhat/6/x86_64/percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm
6)rpm -ivh percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm
7)mkdir /var/lib/mysql
8)ln -s /tmp/mysql.sock /var/lib/mysql
测试:
innobackupex –user=root –password=mysql –database=test /tmp

centos7安装xtrabackup
• 设置yum仓库
1) wget https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-4.noarch.rpm
2) rpm -ivh percona-release-0.1-4.noarch.rpm
3)yum list | grep percona-xt //查看yum里percona-xt列表,可以省略不查看。
• Install the package(yum安装)
4)yum install percona-xtrabackup-24 -y
编译安装数据库 测试命令
注意:/etc/my.cnf 配置文件的socket的位置 是yum安装(/var/lib/mysql/mysql.sock)还是编译安装(/tmp/mysql.sock 自己定义安装的位置),
编译安装创建一个连接文件
5)mkdir -p /var/lib/mysql
6)ln -s /tmp/mysql.sock /var/lib/mysql/
测试:
innobackupex –user=root –password=mysql –database=test /tmp

索引
所有MySQL列类型可以被索引。根据存储引擎定义每个表的最大索引数和最大索引长度。
所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。
索引的存储类型目前只有两种:
1)btree (平衡二叉树)
2)hash (哈希算法)
索引的类型:
1)normal : 普通索引 //是最基本的索引,它没有任何的限制。
2)unique:唯一索引 //字段值必须唯一。
3)fulltext:全文索引
查看索引:
show index from 表名\G;
show keys from 表名\G;
删除索引:
drop index 索引名 on 表名;
查看索引使用情况:
show status like ‘Handler_read%’;
创建普通索引:
create index 索引名 on 表名 (字段名(长度)); //单列索引
create index 索引名 on 表名(字段名(长度),字段名(长度),…); //组合索引
通过修改表结构来创建普通索引:
alter table 表名 add index 索引名(字段名(长度)); //单列索引
alter table 表名 add index 索引名(字段名(长度),字段名(长度)); //组合索引
创建数据库表的时候直接指定普通索引:
create table 表名(字段名 类型,字段名 类型,…..index 索引名(字段名(长度))); //单列索引
create table 表名(字段名 类型,字段名 类型,……index 索引名(字段名(长度),字段名(长度)…)); //组合索引
唯一索引:
它与普通索引类似,不同的是:普通索引列的值必须唯一,但允许有空值。如是组合索引,则列值的组合必须唯一。
创建唯一索引:
create uniqe index 索引名 on 表名(字段名(长度)); //单列索引
create uniqe index 索引梦 on 表名(字段名(长度),字段名(长度)…); //组合索引
通过修改表结构来创建唯一索引:
alter table 表名 add unqiue index 索引名(字段名(长度)); //单列索引
alter table 表名 add unqiue index 索引名(字段名(长度),字段名(长度)…); //组合索引
创建表的时候直接创建唯一索引:
create table 表名(字段名 类型,字段名 类型,…,unique index 索引名(字段名(长度))); //单列索引
create table 表名(字段名 类型,字段名 类型,…,unqiue index 索引名(字段名(长度),字段名(长度)….)); //组合索引
主键索引:
不允许有空值的索引。
修改表结构创建主键索引:
alter table 表名 primary key(字段名); //单列索引
alter table 表名 primary key(字段名,字段名); //组合索引
创建表的时候这届创建主键索引:
create table 表名(字段名 类型,字段名 类型,… primary key(字段名));
create table 表名(字段名 类型,字段名 类型,… primary key(字段名,字段名,…)); //组合索引

主从&主主
原理:主从是基于binlog日志。
主写从读,原因是写少,读多。
ip,端口号,数据库的名,密码,权限。
阿里开发的drds可以配置读写分离,分库分表,收费的。
主从架构图
配置主从服务端
vim /etc/hosts //配置域名解析
192.168.33.128 www.lzq.com master
192.168.33.129 www.qiang.com slave

vim /etc/my.cof //配置MySQL的主文件
[mysqld] // 在此行下面加入代码
server-id = 128 //id一般与主机IP的最后地址来定义,这样容易记忆
log-bin = mysql-bin //建立binlog日志,这就是让主从同步的关键日志
binlog_format = mixed //磁盘与语句变化自动识别转换
重启服务
//grant replication slave on . to ‘用户名’@’主机’ identified by ‘密码’; 我们用了 “slave” 做用户名,给从用,密码是 “123”
grant replication slave,reload,super on . to ‘slave’@’%’ identified by ‘123’;

flush privileges; //提交更新文件
show master status \G; //查看正在使用的binlog日志的位置点
注意:
1.上面操作之后不要做任何操作
2.当然也可以在上面操作之后锁表: flush tables with read lock; 就是只读,但不可以在写入数据,可还要解锁: unlock tables;

客户端
vim /etc/hosts //配置域名解析
192.168.33.128 www.lzq.com master
192.168.33.129 www.qiang.com slave

vim /etc/my.cof //配置MySQL的主文件
[mysqld] // 在此行下面加入代码
server-id = 128 //id一般与主机IP的最后地址来定义,这样容易记忆
log-bin = mysql-bin //建立binlog日志,这就是让主从同步的关键日志
binlog_format = mixed //磁盘与语句变化自动识别转换
重启服务
mysql -h 192.168.33.128 -u slave -p123 //测试一下能否连接master主机,配置成功就能顺利登陆
show master status; //查看正在使用的binlog日志的位置点
mysql -u root -pmysql //登陆mysql
stop slave; //停止自动从主服务器同步数据
// 对主服务器master进行检查同步, 上面的要与master相对应上,否则不会成功,后面的mysql-bin.000004与120就是主服务器我不让你操作的原因。
change master to master_host=’192.168.72.128’,master_user=’slave’,master_password=’123’,master_log_file=’mysql-bin.000004’,master_log_pos=120;
start slave; //启动自动从主服务器同步数据
show slave status\G //查看是否成功同步
上面是报错了,正常是两个YES
解决办法:进去数据库在看一次就变成两个YES
cd /usr/local/mysql/data //进入目录
rm -rf mysql-bin* auto.cnf //删除文件
重启服务
show slave status\G //查看同步
测试: 进入主数据库创建库&表,就会发现从也会同步数据。
配置主主客户端
进入从数据库输入下面的代码:
grant replication slave,reload,super on . to ‘master’@’%’ identified by ‘123’;
之前已经建了slave用户了,所以现在我们建一个master用户给以前的主用,这个用户名可以随意定义
flush privileges; //更新文件
服务端
mysql -h 192.168.33.129 -u master -p123 //查看一下是否能正常登录slave用户,并退出
mysql -uroot -pmysql //登录数据库
stop slave; //停止自动从主服务器同步数据
change master to master_host=’192.168.72.130’,master_user=’master’,master_password=’123’,master_log_file=’mysql-bin.000004’,master_log_pos=414;
start slave; //启动自动从主服务器同步数据
show slave status\G //查看是否成功同步
测试: 在数据库创建库&表,查看是否同步

切换主从,主故障切换
客户端操作:
mysql -uroot -pmysql
stop slave;
reset master;
show master status \G;
grant all on . to ‘rep1’@’192.168.33.128’ identified by ‘rep1’; //此账号给从前的master用,让它变为从
flush privileges;
flush tables with read lock;
在服务端上登录:
mysql -h 192.168.33.129 -urep1 -prep1 //测试一下能否连接现在的master主机

mysql -uroot -pmysql
stop slave;
change master to master_host=’192.168.72.130’,master_user=’rep1’,master_password=’rep1’,master_log_file=’mysql-bin.000001’,master_log_pos=120;
start slave;
show slave status \G;
客户端
unlock tables; //现在从是主了

猜你喜欢

转载自blog.csdn.net/weixin_41949714/article/details/81877112
今日推荐