Mysql主从复制搭建

可以将MySQL服务器分为主库和从库两种身份。MySQL从库同步主库的数据,MySQL主库将数据同步给从库。MySQL过程如下所示
Mysql主从复制搭建_第1张图片
MySQL主从同步实现主要有以下三个过程:
1、主服务器(master)将变更事件(更新、删除、表结构改变等等)写入二进制日志(bin log)。
2、从服务器(slave)的IO线程从主服务器(binlog dump线程)获取二进制日志,并在本地保存一份自己的二进制日志(relay log)
3、从服务器的SQL线程读取本地中继日志(relay log),把 relay log解析成 SQL 语句,并执行

主从复制的好处:

1.数据更安全:做了数据冗余,不会因为单台服务器的宕机而丢失数据
2.性能大大提升:一主多从,不同用户从不同数据库读取,性能提升
3.扩展性更优:流量增大时,可以方便的增加从服务器,不影响系统使用
4.负载均衡:一主多从相当于分担了主机任务,做了负载均衡。

操作系统:Anolis OS 7.9
Master IP:192.168.2.241
Slave    IP:192.168.2.242
systemctl stop firewalld         //必须 关闭防护墙否则查询slave状态是一直显示连接状态中;
编译安装Mysql,Master与Slave安装相同
1.安装依赖包
yum -y install gcc gcc-c++ cmake ncurses-devel autoconf perl perl-devel
2.创建mysql安装目录以及数据库数据存放目录
mkdir /usr/local/mysql
mkdir /usr/local/mysql/data
3.创建用户、用户组
groupadd mysql
useradd -r -g mysql mysql
4.开始安装
tar xf  mysql-5.6.35.tar.gz
cd mysql-5.6.35
[root@bogon mysql-5.6.35]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DINSTALL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1
如果安装失败需要重新编译时,需要清楚旧的对象文件和缓存信息
make clean
rm -rf  CMakeCache.txt
rm -rf /etc/my.cnf
设置目录权限
cd /usr/local/mysql
chown -R mysql:mysql .
chown -R mysql:mysql data
将mysql的启动服务添加到系统服务中
cd /usr/local/mysql
cp support-files/my-default.cnf /etc/my.cnf
创建基础表
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql
配置环境变量
vi /etc/profile
export MYSQL_HOME="/usr/local/mysql"
export PATH="$PATH:$MYSQL_HOME/bin"
刷新环境变量
source /etc/profile
将mysql加入到可控制启动的服务的文件夹内,并命名mysql,即service可控制的服务名,至此可用service mysql start控制启动mysql
/etc/init.d 是/etc/rc.d/init.d的链接,在/etc/init.d添加一个文件会同步在/etc/rc.d/init.d下添加一个相同文件
cd /usr/local/mysql/
cp  support-files/mysql.server /etc/init.d/mysql
让mysql服务加入到开机启动指令管理的服务列表中
chkconfig --add mysql
启动mysql
systemclt start mysql
配置Mysql主从复制
1.修改Master主服务器配置文件
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin     //[必须]启用二进制日志
server-id=241         //[必须]服务器唯一ID,默认是1,一般取IP最后一段
2.修改Slave从服务器配置文件
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin     //[不是必须]启用二进制日志
server-id=242                 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
3.在主服务器建立账户并授权slave;
mysql -u root -presset
mysql>GRANT REPLICATION SLAVE ON *.* to 'resset'@'%' identified by 'resset';
4.登录主服务器的mysql,查询Master的状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      320 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
7.从服务器设置普通用户只读模式
mysql>create user 'resset'@'%' identified by 'resset'; // 创建普通用户,可以远程连接
mysql> grant select on *.* to test@'%'identified by 'test'; //授权所有库,只能查询操作
mysql> grant all privileges on *.* to test@'%'identified by 'resset'; //这是授予所有权限
8.配置从服务器
change master to master_host='192.168.2.241',master_user='resset',master_password='resset',master_log_file='mysql-bin.000001',master_log_pos=320;
9检查从服务器复制功能状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.241                                         //主服务器地址
Master_User: resset                                                         //授权帐户名,尽量避免使用root
Master_Port: 3306                                                          //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 320                                            //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File:localhost-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes                                                  //此状态必须YES
Slave_SQL_Running: Yes                                                //此状态必须YES ...... 注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。 以上操作过程,主从服务器配置完成。
MySql主从搭建完成!
10.Mysql添加用户、删除用户与授权详细说明
1.新建用户
mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
这样就创建了一个名为:test 密码为:1234 的用户。
注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。
如果想远程登录的话,
将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
2.为用户授权
授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
2.1 登录MYSQL(有ROOT权限),这里以ROOT身份登录:
@>mysql -u root -p @>密码
2.2 首先为用户创建一个数据库(testDB):
 mysql>create database testDB;
2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):
 mysql>grant all privileges on testDB.* to test@localhost identified by '1234';
 mysql>flush privileges;//刷新系统权限表 
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
2.4 如果想指定部分权限给一用户,可以这样来写:
 mysql>grant select,update on testDB.* to test@localhost identified by '1234';
 mysql>flush privileges; //刷新系统权限表
2.5 授权test用户拥有所有数据库的某些权限:
mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";
 //test用户对所有数据库都有select,delete,update,create,drop 权限。
 //@"%" 表示对所有非本地主机授权,不包括localhost。
 (localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)
 //对localhost授权: 加上一句grant all privileges on testDB.* to test@localhost identified by '1234';即可。
3.删除用户
@>mysql -u root -p
@>密码
mysql>Delete FROM user Where User='test' and Host='localhost';
mysql>flush privileges;
mysql>drop database testDB; //删除用户的数据库
删除账户及权限:>drop user 用户名@'%';
        >drop user 用户名@ localhost;
其它Mysql操作
5. 列出所有数据库   
mysql>show database;
6. 切换数据库   
mysql>use '数据库名';
7. 列出所有表   
mysql>show tables;
8. 显示数据表结构   
mysql>describe 表名;
9. 删除数据库和数据表   
mysql>drop database 数据库名;   
mysql>drop table 数据表名;
验证Mysql主从复制是否成功
在Master创建数据库
@>mysql -u root -p
@>密码
mysql> create database ressetDB;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| ressetDB           |
| test               |
+--------------------+
5 rows in set (0.00 sec)
到Slave服务器查询数据库验证
@>mysql -u root -p
@>密码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| ressetDB           |
| test               |
+--------------------+

你可能感兴趣的:(mysql,数据库,服务器)