MySQL单机搭建
MySQL下载
这里使用的版本是mysql-8.0.20-linux-glibc2.12-x86_64
MySQL下载有多种方式,可以选择官网也可以选择镜像
安装之前卸载mariadb
## 查看mariadb信息
rpm -qa | grep mariadb
## 卸载
sudo rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps
## 再次查看
rpm -qa | grep mariadb
下载安装包
## 下载
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
## 解压
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz -C /
## 软链接
ln -s /mysql-8.0.20-linux-glibc2.12-x86_64/ /mysql
新建一个存放数据的文件夹data
cd /mysql
## 创建data目录
mkdir data
创建mysql用户组和 mysql 用户
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql .
初始化数据库
mkdir mysql_install_db
chmod 777 ./mysql_install_db
bin/mysqld --initialize --user=mysql --basedir=/mysql --datadir=/mysql/data
执行完后记住初始密码

配置文件
vim /etc/my.cnf
my.cnf
[mysqld]
# 设置连接端口
port = 3306
# 设置mysql的安装目录
basedir = /mysql
# 设置mysql数据库的数据的存放目录
datadir = /mysql/data
socket = /mysql/mysql.sock
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
socket = /mysql/mysql.sock
default-character-set=utf8
建立系统服务
cp /mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
## 检查系统服务是否有mysqld服务
chkconfig --list mysqld
配置环境变量
vim /etc/profile

## 刷新环境变量生效
source /etc/profile
启动服务
service mysql start
## 用之前的初始密码登录
mysql -uroot -p
连接mysql后一些命令
/* 修改密码 */
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
/* 远程登录 */
use mysql;
update user set host='%' where user='root' limit 1;
flush privileges;
MySQL主从搭建
主从搭建主要是改写配置
首先先于上面的方式搭建2台Mysql服务
192.168.186.131–主机器
192.168.186.132–从机器
修改主服务配置
/etc/my.cnf的[mysqld]下面增加以下配置
#服务节点的唯一标识。需要给集群中的每个服务分配一个单独的ID。
server-id=42
#开启binlog
#打开Binlog日志记录,并指定文件名
log_bin=master-bin
#Binlog日志文件
log_bin-index=master-bin.index
重新启动,连接客户端,给root用户分配一个replication slave的权限
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
flush privileges;
#查看主节点同步状态:
show master status;

结果中的File和Position记录的是当前日志的binlog文件以及文件中的索引。
而后面的Binlog_Do_DB和Binlog_Ignore_DB这两个字段是表示需要记录binlog文件的库以及不需要记录binlog文件的库。my.cnf配置指定
修改从服务配置
/etc/my.cnf的[mysqld]下面增加以下配置
#主库和从库需要不一致
server-id=43
#打开MySQL中继日志
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
#打开从服务二进制日志
log-bin=mysql-bin
#使得更新的数据写进二进制日志中
log-slave-updates=1
重新启动,连接客户端,执行分配主节点命令
MASTER_LOG_FILE和MASTER_LOG_POS必须与主服务中查到的保持一致
CHANGE MASTER TO
MASTER_HOST='192.168.186.131',
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=535,
GET_MASTER_PUBLIC_KEY=1;
还是在客户端执行
#开启slave
start slave;
#查看主从同步状态
show slave status \G;

测试主从搭建是否成功
主节点创建一个数据库并插入一条数据
create database testMasterSlave;
use testMasterSlave;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into t_user(name) values('aa');

成功创建!!!!
其他
这时候主从数据时全部同步,如果我们只想要一部分数据库同步该怎么配呢
修改主服务/etc/my.cnf
#需要同步的二进制数据库名
binlog-do-db=masterdemo
#只保留7天的二进制日志,以防磁盘被日志占满(可选)
expire-logs-days = 7
#不备份的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performation_schema
binlog-ignore-db=sys
修改从服务/etc/my.cnf
#如果salve库名称与master库名相同,使用本配置
replicate-do-db = masterdemo
#如果master库名[mastdemo]与salve库名[mastdemo01]不同,使用以下配置[需要做映射]
replicate-rewrite-db = masterdemo -> masterdemo01
#如果不是要全部同步[默认全部同步],则指定需要同步的表
replicate-wild-do-table=masterdemo01.t_dict
replicate-wild-do-table=masterdemo01.t_num
配置完成了之后,在show master status指令中,就可以看到Binlog_Do_DB和Binlog_Ignore_DB两个参数的作用了
注意点
数据只能从主服务同步到从服务,不能从从服务同步到主服务。为了保证数据一致,通常会需要保证数据只在主服务上写,而从服务只进行数据读取。mysql主从本身是无法提供读写分离的服务的,需要由业务自己来实现