硬件需求: 准备俩台一样的机器
内存: 至少2G 磁盘; 至少20G cpu: 至少2核心
初始化服务器
[root@mysql ~]# sed -ri s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
[root@mysql ~]# systemctl stop firewalld && systemctl disable firewalld
安装必要的软件包
[root@mysql ~]# yum -y groupinstall "Development Tools"
[root@mysql ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
[root@mysql ~]# rpm -ivh mysql80-community-release-el7-1.noarch.rpm
# ehco $? 查看是否为0
修改安装mysql的yum源文件
[root@mysql ~]# vim /etc/yum.repos.d/mysql-community.repo
把安装5.7的源打开, 关闭安装8.0的源 1是开启 0是关闭
[root@mysql ~]# yum -y install mysql-community-server
[root@mysql ~]# systemctl start mysqld && systemctl enable mysqld
获取密码
[root@mysql ~]# grep "password" /var/log/mysqld.log
2018-12-26T22:41:24.218413Z 1 [Note] A temporary password is
generated for root@localhost: %i+g10uS.dre
登入数据库
[root@mysql ~]# mysql -uroot -p"%i+g10uS.dre"
修改登入密码: mysql> alter user 'root'@'localhost' identified by "(Bavdu..1227)";
安装所需要的依赖及安装mysql的包
$ yum -y update
$ yum -y groupinstall “Development Tools”
$ yum -y install ncurses ncurses-devel bison libgcrypt perl make cmake
$ wget https://dev.mysql.com/get/Downloads/MySQL 5.7/mysql-boost-5.7.24.tar.gz
在系统中添加运行mysqld进程的用户mysql
[root@mysql_source ~]# groupadd mysql
[root@mysql_source ~]# useradd -M -g mysql -s /sbin/nologin mysql
在系统中添加自定义mysql数据库目录及其他必要目录
[root@mysql_source ~]# mkdir -p /usr/local/mysqld/{data,mysql,log,tmp}
[root@mysql_source ~]# chown -R mysql:mysql /usr/local/mysqld/*
将mysql-boots-5.7.24.tar.gz 解压到当前目录,并执行部署操作
[root@mysql_source ~]# tar xf mysql-boost-5.7.24.tar.gz
[root@mysql_source ~]# cd mysql-5.7.24
[root@mysql_source mysql-5.7.24]#
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysqld/mysql \
-DMYSQL_DATADIR=/usr/local/mysqld/data \
-DWITH_BOOST=/root/mysql-5.7.24/boost \
-DDEFAULT_CHARSET=utf8
DWITH_BOOST=BOOTS下载包的路径 上面为在root下下载mysql-boots-5.7.24.tar.gz
# echo $? (查看是否成功)
make
[root@mysql_source mysql-5.7.24]# make -j `lscpu | awk 'NR==4{ print $2 }'`
# echo $?
[root@mysql_source mysql-5.7.24]# make install
......
-- Installing: /usr/local/mysqld/mysql/support-files/mysql.server
# echo $? = 0 congratuations complete !
初始化mysql安装配置
1.提升mysql命令为系统级别命令
[root@mysql_source ~]# echo "export PATH=$PATH:/usr/local/mysqld/mysql/bin" >>/etc/profile
[root@mysql_source ~]# source /etc/profile
2.拷贝默认配置文件至/etc/my.cnf
[root@mysql_source mysql]# chown -R mysql.mysql /usr/local/mysqld/*
[root@mysql_source ~]# cd /usr/local/mysqld/mysql/mysql-test/include
[root@mysql_source include]# cp /etc/{my.cnf,my.cnf.bak}
[root@mysql_source include]# cp default_mysqld.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
[root@mysql_source include]# vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysqld/mysql
datadir = /usr/local/mysqld/data
tmpdir = /usr/local/mysqld/tmp
socket = /usr/local/mysqld/tmp/mysql.sock
pid_file = /usr/local/mysqld/tmp/mysqld.pid
log_error = /usr/local/mysqld/log/mysql_error.log
slow_query_log_file = /usr/local/mysqld/log/slow_warn.log
server_id = 11
user = mysql
port = 3306
bind-address = 0.0.0.0
character-set-server = utf8
default_storage_engine = InnoDB
3.执行数据库服务初始化操作
[root@mysql_source mysql]# mysqld --defaults-file=/etc/my.cnf --initialize --user='mysql'
4.启动mysqld服务
[root@mysql_source mysql]# mysqld_safe --defaults-file=/etc/my.cnf &
[1] 25705
2018-12-28T09:19:35.334751Z mysqld_safe Logging to '/usr/local/mysqld/log/mysql_error.log'.
2018-12-28T09:19:35.379829Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysqld/data
5.设置mysql.socket软链接到mysql命令指定的目录中
[root@mysql_source ~]# ln -s /usr/local/mysqld/tmp/mysql.sock /tmp/mysql.sock
6.配置mysqld服务的管理工具
[root@mysql_source support-files]# cd /usr/local/mysqld/mysql/support-files
[root@mysql_source support-files]# cp mysql.server /etc/init.d/mysqld
[root@mysql_source support-files]# chkconfig --add mysqld
[root@mysql_source support-files]# chkconfig mysqld on
登录数据库并进行更改密码
[root@mysql_source mysql]# grep "password" /usr/local/mysqld/log/mysql_error.log
2018-12-28T09:18:34.214401Z 1 [Note] A temporary password is generated for root@localhost: ejhszb2:m3wJ
[root@mysql_source mysql]# mysqladmin -uroot -p"ejhszb2:m3wJ" password newpassword
企业中常用的MySQL部署参数:<参考使用>
-DCMAKE_INSTALL_PREFIX=/usr/local/mysqld/mysql
-DMYSQL_DATADIR=/usr/local/mysqld/data
-DDOWNLOAD_BOOST=1
-DWITH_BOOST=/root/mysql-5.7.24/boost
-DSYSCONFDIR=/etc
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_MYISAM_STORAGE_ENGINE=1
-DENABLED_LOCAL_INFILE=1
-DENABLE_DTRACE=0
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_EMBEDDED_SERVER=1
主从复制(也称 AB 复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。
#复制是异步的 从站不需要永久连接以接收来自主站的更新。
根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表。
MySQL中复制的优点包括:
主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
每个从服务器都会收到主服务器二进制日志的全部内容的副本。
从服务器设备负责决定应该执行二进制日志中的哪些语句。
除非另行指定,否则主从二进制日志中的所有事件都在从站上执行。
如果需要,您可以将从服务器配置为仅处理一些特定数据库或表的事件。
重要: 您无法将主服务器配置为仅记录特定事件。
每个从站(从服务器)都会记录二进制日志坐标:
文件名
文件中它已经从主站读取和处理的位置。
由于每个从服务器都分别记录了自己当前处理二进制日志中的位置,因此可以断开从服务器的连接,重新连接然后恢复继续处理。
一主多从
如果一主多从的话,这时主库既要负责写又要负责为几个从库提供二进制日志。此时可以稍做调整,将二进制日志只给某一从,这一从再开启二进制日志并将自己的二进制日志再发给其它从。或者是干脆这个从不记录只负责将二进制日志转发给其它从,这样架构起来性能可能要好得多,而且数据之间的延时应该也稍微要好一些。
关于二进制日志
mysqld将数字扩展名附加到二进制日志基本名称以生成二进制日志文件名。每次服务器创建新日志文件时,该数字都会增加,从而创建一系列有序的文件。每次启动或刷新日志时,服务器都会在系列中创建一个新文件。服务器还会在当前日志大小达到max_binlog_size参数设置的大小后自动创建新的二进制日志文件 。二进制日志文件可能会比max_binlog_size使用大型事务时更大, 因为事务是以一个部分写入文件,而不是在文件之间分割。
为了跟踪已使用的二进制日志文件, mysqld还创建了一个二进制日志索引文件,其中包含所有使用的二进制日志文件的名称。默认情况下,它具有与二进制日志文件相同的基本名称,并带有扩展名’.index’。在mysqld运行时,您不应手动编辑此文件。
术语二进制日志文件通常表示包含数据库事件的单个编号文件。
术语 二进制日志 表示含编号的二进制日志文件集加上索引文件。
SUPER 权限的用户可以使用SET sql_log_bin=0语句禁用其当前环境下自己的语句的二进制日志记录
配置Replication
配置步骤:
1.1. 在主服务器上,您必须启用二进制日志记录并配置唯一的服务器ID。需要重启服务器。
编辑主服务器的配置文件 my.cnf,添加如下内容
mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
创建日志目录并赋予权限
[root@mysql ~]# mkdir /var/log/mysql
[root@mysql ~]# chown mysql.mysql /var/log/mysql
重启服务
[root@mysql ~]# systemctl restart mysqld
注意
如果省略server-id(或将其显式设置为默认值0),则主服务器拒绝来自从服务器的任何连接。
为了在使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性,
您应该在master my.cnf文件中使用以下配置项:
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
确保未在复制主服务器上启用skip-networking选项。
如果已禁用网络,则从站无法与主站通信,并且复制失败。
2.应该创建一个专门用于复制数据的用户
例如,计划使用用户 repl 可以从任何主机上连接到 master 上进行复制操作, 并且用户 repl 仅可以使用复制的权限。
在主服务器
上执行如下操作
mysql> CREATE USER 'repl'@'%'
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' identified by
'123';
mysql>
3.在从服务器
上使用刚才的用户进行测试连接
[root@mysql ~]# mysql -urepl -p'123' -hmysql-master1
主服务器中有数据
[root@mysql ~]# mysqldump -u用户名 -p密码 --all-databases --master-data=1 > dbdump.db
这里的用户是主服务器的用户
如果不使用 --master-data 参数,则需要手动锁定单独会话中的所有表。
2. 从主服务器中使用 scp 或 rsync 等工具,把备份出来的数据传输到从服务器中。
在主服务中执行如下命令
[root@mysql ~]# scp dbdump.db root@mysql-slave1:/root/
这里的 mysql-slave1 需要能被主服务器解析出 IP 地址,或者说可以在主服务器中 ping 通。
3.配置从服务器,并重启
在从服务器 上编辑其配置文件 my.cnf 并添加如下内容
// my.cnf 文件
[mysqld]
server-id=2
/*导入数据*/
mysql> source /root/fulldb.dump
在从服务器配置连接到主服务器的相关信息
mysql> CHANGE MASTER TO
MASTER_HOST='mysql-master1', -- 主服务器的主机名(也可以是 IP)
MASTER_USER='repl', -- 连接到主服务器的用户
MASTER_PASSWORD='123'; -- 到主服务器的密码
5.启动从服务器的复制线程
mysql> start slave;
Query OK, 0 rows affected (0.09 sec)
检查是否成功
mysql> show slave status\G
输出结果中应该看到 I/O 线程和 SQL 线程都是 YES, 就表示成功。
执行此过程后,在主服务上操作的修改数据的操作都会在从服务器中执行一遍,这样就保证了数据的一致性。
主服务无数据
及不需要mysqldump数据的导出和导入
直接在从库上配置即可