Centos7搭建Mysql-5.6,及主从复制。
Server1:192.168.1.189 (主)
Server2:192.168.1.190 (从)
1、关闭默认的firewalld防火墙,安装iptables。
systemctl disable firewalld
安装iptables
yum -y install iptables*
并设置iptables开机自启动
2、开始安装mysql-5.6.38
检查是否默认安装了mysql及mariadb,默认安装了就卸载掉。
安装相关依赖包。
yum -y install cmake bison git ncurses-devel gcc gcc-c++
添加一个mysql使用的用户。
下载mysql-5.6.38.tar
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.38.tar.gz
解压下载好的软件包。
tar -zxvf mysql-5.6.38.tar.gz
创建数据目录及安装目录。
mkdir -p /usr/local/mysql
mkdir -p /usr/local/mysql/data
查找一下是否有这个文件CMakeCache.txt,有的话就删除。
find / -name CMakeCache.txt
进入解压包进行安装,路径根据自己服务器情况进行指定。
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql_3306.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DENABLE_DOWNLOADS=1
检查一下是否有错,若返回值不为0就有错误
进行make编译安装,编译时间较长。
make && make install
安装完成后创建日志需要的目录
mkdir -p /usr/local/mysql/log/errlog/ #错误日志目录
mkdir -p /usr/local/mysql/log/binlog/ #log-bin日志目录
mkdir -p /usr/local/mysql/log/slowlog/ #慢查询日志目录
修改目录的属主属组,及权限。
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/*
设置可读可写权限。
创建mysql-sever系统表。
cd /usr/local/mysql/
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
报错了需要Perl的依赖
然后在执行上面的语句就好了。
将配置文件移动到/etc下,配置问价你的默认路径。
根据您公司环境,及服务器进行配置)
主配置my.cnf
[client]
#password=your_password
port=3306
socket=/usr/local/mysql/mysql_3306.sock
default-character-set=UTF8
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
socket=/usr/local/mysql/mysql_3306.sock
#[mysqld_safe]
log-error=/usr/local/mysql/log/errlog/error.log
pid-file=/usr/local/mysql/mysql.pid
user=mysql
tmpdir=/tmp
skip-name-resolve
skip-external-locking
lower_case_table_names=1
server_id=1
binlog_format=row
log_bin_trust_function_creators=1
log_bin=/usr/local/mysql/log/binlog/mysql-bin
log-slave-updates
#设置log-bin日志删除30之前的,不删除会产生很大的日志
expire_logs_days=30
key_buffer_size=4024M
max_allowed_packet=256M
max_heap_table_size=256M
tmp_table_size=256M
sort_buffer_size=128K
read_buffer_size=4M
read_rnd_buffer_size=8M
myisam_sort_buffer_size=64M
thread_cache_size=64
query_cache_size=64M
max_connections=1000
max_connect_errors=1024
##连接超时##
wait_timeout=172800
interactive_timeout=172800
table_open_cache = 400
expire_logs_days=10
innodb_buffer_pool_size=2G
innodb_file_per_table=1
innodb_log_buffer_size=32M
innodb_open_files=800
sync_binlog=0
#打开慢查询日志功能
slow_query_log = 1
#超过2秒的查询记录下来
long_query_time = 2
##记录下没有使用索引的查询
log_queries_not_using_indexes = 0
slow_query_log_file=/usr/local/mysql/log/slowlog/slowquery.log
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
[isamchk]
key_buffer_size = 128M
sort_buffer_size = 128K
[myisamchk]
key_buffer = 128M
sort_buffer_size = 128K
配置启动脚本。
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
在安装路径下先关闭一下mysql在启动。
bin/mysqld stop
启动mysql
软连接mysql使用mysql –uroot –p直接登陆。
ln -s /usr/local/mysql/bin/mysql /usr/sbin/mysql
登陆mysql
mysql -u root –p ###密码为空,回车进入
设置密码
use mysql;
update user set password=PASSWORD('123.com') where user='root';
授权远程登陆。
grant all privileges no *.* to root@”%” identified by “123.com”;
从服务器搭建:
从服务器基本的一些配置跟上面一样,除了目录不一样,用于区分主从。
安装目录
mkdir -p /usr/local/mysqlslave
mkdir -p /usr/local/mysqlslave/data
从服务器的cmake配置
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysqlslave -DMYSQL_UNIX_ADDR=/usr/local/mysqlslave/mysql_3306.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysqlslave/data -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DENABLE_DOWNLOADS=1
创建从数据库的日志目录,跟主不一样所以我体现在word
/usr/local/mysqlslave/log/errlog/ #错误日志
/usr/local/mysqlslave/log/binlog/ #log-bin日志
/usr/local/mysqlslave/log/relaylog/ # 中继日志
/usr/local/mysqlslave/log/slowlog/ #慢查询日志
授权目录
chown -R mysql:mysql /usr/local/mysqlslave
chown -R mysql:mysql /usr/local/mysqlslave/*
chmod 777 -R /usr/local/mysqlslave
chmod 777 -R /usr/local/mysqlslave/*
创建mysql-server表
cd /usr/local/mysqlslave/
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysqlslave/data
报错了,缺少perl,安装一个依赖就好了,再次执行。
再次执行就好了。
从一样的,将my.cnf移动到/etc下面,进行配置。
(根据您公司环境,及需求进行配置)
从配置。Vim /etc/my.cnf
[client]
#password = your_password
port=3306
socket=/usr/local/mysqlslave/mysql_3306.sock
default-character-set=UTF8
## The MySQL server
[mysqld]
port=3306
basedir=/usr/local/mysqlslave/
socket=/usr/local/mysqlslave/mysql_3306.sock
datadir=/usr/local/mysqlslave/data
log-error=/usr/local/mysqlslave/log/errlog/error.log
pid-file=/usr/local/mysqlslave/mysql.pid
user=mysql #此处为mysql源码安装的系统用户名
tmpdir=/tmp
##log_timestamps = SYSTEM
##explicit_defaults_for_timestamp=1
skip-name-resolve
skip-external-locking
lower_case_table_names=1
server_id=2
binlog_format=row
log_bin_trust_function_creators=1
log_bin=/usr/local/mysqlslave/log/binlog/mysql-bin
log-slave-updates
##设置log-bin日志删除30之前的,不删除会产生很大的日志
expire_logs_days=30
### relay_log配置中继日志
relay_log=/usr/local/mysqlslave/log/relaylog/mysql-relay-bin
#
key_buffer_size=4024M
max_allowed_packet=256M
max_heap_table_size=256M
tmp_table_size=256M
sort_buffer_size=128K
read_buffer_size=4M
read_rnd_buffer_size=8M
myisam_sort_buffer_size=64M
thread_cache_size=64
query_cache_size=64M
max_connections=1000
max_connect_errors=1024
wait_timeout=172800
interactive_timeout=172800
table_open_cache=400
expire_logs_days=10
innodb_buffer_pool_size=2G
innodb_file_per_table=1
innodb_log_buffer_size=32M
innodb_open_files=800
sync_binlog=0
## 打开慢查询日志功能
slow_query_log=1
## 超过2秒的查询记录下来
long_query_time=2
## 记录下没有使用索引的查询
log_queries_not_using_indexes=0
slow_query_log_file=/usr/local/mysqlslave/log/slowlog/slowquery.log
[mysqldump]
quick
max_allowed_packet=16M
[mysql]
[isamchk]
key_buffer_size=128M
sort_buffer_size=128K
[myisamchk]
key_buffer=128M
sort_buffer_size=128K
##[mysqlhotcopy]
##interactive_timeout
先关闭一下数据库,在启动
配置启动脚本。
cp /usr/local/mysqlslave/support-files/mysql.server /etc/init.d/mysqld
软连接mysql使用mysql –uroot –p直接登陆。
ln -s /usr/local/mysqlslave/bin/mysql /usr/sbin/mysql
启动mysql
配置主从
主my.cnf配置
Server-id,master务器不能跟slave服务器的id一样。
Bin-log日志的路径指定,要有写入权限。
修改从的my.cnf配置
在主库(master)中创建一个用户用于与从库同步的用户名和密码(这里我创建一个slave_user用户,密码为123.COM!),并给slave_user用户授权,以用于主库操作从库。
create user "slave_user"@"192.168.1.190" identified by "123.COM!";
grant replication slave on *.* to 'slave_user'@'192.168.1.190';
flush privileges;
select host from mysql.user; #查看用户是否创建成功
查看master(主)状态
show master status;
这里的mysql-bin.000002,和Position值526,slave配置的时候会用到。
导出master的数据到从服务器去,让数据一致。
将数据上传至slave服务器。
在slave(从)数据库导入主服务器的数据。
配置slave,让其主从同步。
mysql> change master to
-> master_host='192.168.1.189',
-> master_user='slave_user',
-> master_password='123.COM!',
-> master_log_file='mysql-bin.000002',
-> master_log_pos=526,
-> MASTER_CONNECT_RETRY=10;
##关于MASTER_CONNECT_RETRY,在主服务器宕机的情况下,从服务器线程重新尝试连接主服务器之前睡眠的秒数。如果主服务器.Info文件中的值可以读取则优先使用,如果未设置,默认为60秒。
启动slave
start slave;
##关闭命令stop slave
##重启命令reset slave
查看slave的状态。
show slave status \G
只要Slave_IO_Running: Yes, Slave_SQL_Running: Yes,主从就搭建成功。若其中一项不为yes,查看mysql的错误日志。
在主数据库创建一个库,看看是否同步。
create database testdb;
use testdb;
create table book(
-> id int(10),
-> name varchar(15),
-> size int);
insert into book (id,name,size) values(1,"test",100);
主库插入数据完毕后在从库查看,是否有数据,如果有数据则主从同步成功。