0
点赞
收藏
分享

微信扫一扫

Linux下mysql主从部署——免安装版本(直接压缩包解压)

Yaphets_巍 2022-10-11 阅读 118

一、首先下载压缩包(主从两台服务器都下载)

链接:​​https://pan.baidu.com/s/1SShMt_O3w9h3PMEgeFy5Ig​​ 提取码:5bpx

Linux下mysql主从部署——免安装版本(直接压缩包解压)_mysql

二、部署mysql主

1、解压安装包+配置

tar xf Percona-Server-5.7.30-33-Linux.x86_64.ssl101.tar.gz ##解压安装包
useradd -s /sbin/nologin mysql ##创建mysql用户
mkdir -p /data/mysql3306/{logs,data,tmp} ##创建目录
mkdir -p /etc/mysql #创建目录
ln -s /root/Percona-Server-5.7.30-33-Linux.x86_64.ssl101 /usr/local/mysql5.7 ##创建软连接
chown -R mysql.mysql /data/mysql3306 ##赋权

2、配置my.cnf

mem=$(free -h | awk '/Mem:/{print $2}')
echo $mem | grep --color "\."

if [ $? -eq 0 ] ##指上一次执行的结果,成功是0,失败是1;此语句判断执行结果是否成功
then
frees=$(echo $mem | awk -F'.' '{print $1}')
else
frees=$(echo $mem | tr -cd '[0-9]')
fi

free=$(echo $frees*0.8 | bc | awk -F'.' '{print $1}')

cat > /etc/mysql/my.cnf << EOF
[mysqld_safe]
log-error=/data/mysql3306/logs/mysqld.log
open-files-limit = 65535

[mysqld]
#MySQL Server layer basic setting
server_id = 1
port = 3306
socket = /data/mysql3306/tmp/mysql.sock
slow_query_log_file = /data/mysql33006/logs/mysql.slow
character_set_server= utf8
group_concat_max_len = 102400
lock_wait_timeout = 10
wait_timeout = 400
skip_name_resolve=1
#MySQL Server layer directory setting
basedir = /usr/local/mysql5.7
datadir = /data/mysql3306/data
tmpdir = /data/mysql3306/tmp
log-error=/data/mysql3306/logs/mysqld.log
pid-file = /data/mysql3306/tmp/mysqld3306.pid
gtid-mode = ON
enforce-gtid-consistency = ON

#MySQL Server layer connection setting
max_connections = 2000
max_connect_errors = 100000
max_allowed_packet = 32M
back_log = 100

#MySQL Server layer binlog setting
log_bin_trust_function_creators = on
expire_logs_days = 30
binlog_cache_size = 20M
log-bin = /data/mysql3306/logs/mysql-bin
binlog_format = row

###replication###
#replicate-rewrite-db=cloudaccount->cloudaccount_dz2
log_slave_updates = 1
relay_log_recovery = 1
relay_log_purge = 0
relay_log = /data/mysql3306/logs/mysql-relay-bin
relay_log_index = /data/mysql3306/logs/mysql-relay-bin.index
skip-slave-start
slave-net-timeout = 10
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_master_wait_no_slave = 1
loose_rpl_semi_sync_master_timeout = 1000
#loose_rpl_semi_sync_slave_enabled = 1
#slave_skip_errors = 1396
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 16
master_info_repository = TABLE
relay_log_info_repository = TABLE
slave_pending_jobs_size_max=150M
#MySQL Server layer memory management setting
tmp_table_size = 1024M
max_heap_table_size = 1024M
read_buffer_size = 20M
read_rnd_buffer_size = 50M
sort_buffer_size = 50M
join_buffer_size = 160M
query_cache_size = 0
thread_stack = 2M
thread_handling = pool-of-threads
thread_pool_oversubscribe = 8
#MySQL Server layer transaction management setting
transaction_isolation = READ-COMMITTED
autocommit = ON
log_timestamps=system

#MySQL Server layer log related setting
log_error_verbosity = 3
slow_query_log = ON
long_query_time = 5
slow_query_log_file = /data/mysql3306/logs/mysql.slow
#log_output = 'file,table'
log_output = 'file'
#log_queries_not_using_indexes = 1

#MySQL Server layer other behaviour setting
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
#optimizer_switch='index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=off' ##关闭5.7新特性子查询drived_merge
optimizer_switch = 'derived_merge=off' ##关闭5.7新特性子查询drived_merge
event_scheduler = ON
lower_case_table_names = 1
explicit_defaults_for_timestamp = ON
default-storage-engine = INNODB
##ft_min_word_len = 4

# Statistic
# userstat = ON
# thread_statistics = ON

# MyISAM Engine related setting
key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 2048
##mysql允许用于MyISAM表重建索引的最大存储空间(在磁盘),如果文件的大小超过辞职,索引会用keycache代替,这样会慢些;默认是2G,如果MyISAM表的索引文件大小超过此值并且磁盘空间充裕,增加此变量的值可以提升效率,必须在原有的分许上有磁盘空间

myisam_repair_threads = 1
#myisam_recover

#InnoDB Engine related setting
#InnoDB memory management related setting
innodb_buffer_pool_size = 12G
innodb_max_dirty_pages_pct = 90
innodb_sync_array_size = 16
innodb_max_dirty_pages_pct = 90
innodb_sync_array_size = 16

#table open cache related
table_open_cache = 6144
table_open_cache_instances = 16
#innodb_additional_mem_pool_size = 16M ##This variable have been removed MySQL 5.7

#innodb_numa_interleave = 1 ##Only work with Percona 5.6.27 and later

##InnoDB engine I/O related setting
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_flush_method = O_DIRECT

#InnoDB engine File management related setting
innodb_data_file_path = ibdata1:12M:autoextend #10M-->12M, 12M is default values, it is meaningless to set it to 10M
innodb_file_per_table = 1 #this value have been the default value in MySQL 5.7

#InnoDB engine undo log related setting
innodb_undo_directory = /data/mysql3306/data
#innodb_undo_tablespaces = 4
innodb_purge_batch_size = 5000
innodb_purge_threads = 8
innodb_page_cleaners = 8

#InnoDB engine redo log related setting
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 20M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_log_group_home_dir = /data/mysql3306/logs

#InnoDB engine lock and transaction management setting
innodb_lock_wait_timeout = 60

#InnoDB engine other behaviour setting
innodb_large_prefix = ON ##this value have been the default value in MySQL 5.7
innodb_strict_mode = ON ##this value have been the default value in MySQL 5.7
innodb_checksum_algorithm = crc32 ##this value have been the default value in MySQL 5.7


[mysqldump]
quick
max_allowed_packet = 160M

[mysql]
no-auto-rehash
# Only allow UPDATEs and DELETEs that use keys.
#safe-updates

[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

[mysqlhotcopy]
interactive-timeout

EOF

3、启动mysql

/usr/local/mysql5.7/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql
nohup /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf &> /data/mysql3306/logs/runlog.log &

4、修改mysql中root密码

defaltpass="$(awk '/temporary password is/{print $NF}' /data/mysql3306/logs/mysqld.log)"
HISTCONTROL=ignorespace
/usr/local/mysql5.7/bin/mysql --connect-expired-password -u root -p"$defaltpass" -S /data/mysql3306/tmp/mysql.sock -e"set password=password('Zhanghaha123');"
/usr/local/mysql5.7/bin/mysql -u root -p'Zhanghaha123' -S /data/mysql3306/tmp/mysql.sock -e"flush privileges;"

5、新建用户+授权

/usr/local/mysql5.7/bin/mysql -u root -p'Zhanghaha123' -S /data/mysql3306/tmp/mysql.sock  -e"create  user dev_eaf@'%' identified by 'test@2022';"

6、新建数据库+赋权

/usr/local/mysql5.7/bin/mysql -u root -p'Zhanghaha123' -S /data/mysql3306/tmp/mysql.sock  -e"create database test;"
/usr/local/mysql5.7/bin/mysql -u root -p'Zhanghaha123' -S /data/mysql3306/tmp/mysql.sock -e"grant select ,update,delete,insert on .* to dev_eaf@'%';"

7、主库中创建从节点用户+授权

下面IP为对应从节点IP

/usr/local/mysql5.7/bin/mysql -u root -p'Zhanghaha123' -S /data/mysql3306/tmp/mysql.sock  -e"create  user repl@'172.30.5.125' identified by 'Repl@2022';"      
/usr/local/mysql5.7/bin/mysql -u root -p'Zhanghaha123' -S /data/mysql3306/tmp/mysql.sock -e"grant REPLICATION CLIENT,REPLICATION SLAVE ,SELECT ON *.* to repl@'172.30.5.125';"

8、配置开机自启动

chmod +x /etc/rc.d/rc.local
grep "mysqld_safe" /etc/rc.d/rc.local > /dev/null
echo "nohup /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf &> /data/mysql3306/logs/runlog.log &" >> /etc/rc.d/rc.local

三、部署从节点

1、解压安装包,配置 (与主节点类似)

tar xf Percona-Server-5.7.30-33-Linux.x86_64.ssl101.tar.gz
useradd -s /sbin/nologin mysql
mkdir -p /data/mysql3306/{logs,data,tmp}
mkdir -p /etc/mysql/
ln -s /root/Percona-Server-5.7.30-33-Linux.x86_64.ssl101 /usr/local/mysql5.7
chown -R mysql.mysql /data/mysql3306

2、配置my.cnf

mem=$(free -h | awk '/Mem:/{print $2}')
echo $mem | grep --color "\."

if [ $? -eq 0 ]
then
frees=$(echo $mem | awk -F'.' '{print $1}')
else
frees=$(echo $mem | tr -cd '[0-9]')
fi

free=$(echo $frees*0.8 | bc | awk -F'.' '{print $1}')

cat > /etc/mysql/my.cnf << EOF
[mysqld_safe]
log-error=/data/mysql3306/logs/mysqld.log
open-files-limit = 65535

[mysqld]
#MySQL Server layer basic setting
server_id = 5
port = 3306
socket = /data/mysql3306/tmp/mysql.sock
slow_query_log_file = /data/mysql33006/logs/mysql.slow
character_set_server= utf8
group_concat_max_len = 102400
lock_wait_timeout = 10
wait_timeout = 400
skip_name_resolve=1
#MySQL Server layer directory setting
basedir = /usr/local/mysql5.7
datadir = /data/mysql3306/data
tmpdir = /data/mysql3306/tmp
log-error=/data/mysql3306/logs/mysqld.log
pid-file = /data/mysql3306/tmp/mysqld3306.pid
gtid-mode = ON
enforce-gtid-consistency = ON

#MySQL Server layer connection setting
max_connections = 2000
max_connect_errors = 100000
max_allowed_packet = 32M
back_log = 100

#MySQL Server layer binlog setting
log_bin_trust_function_creators = on
expire_logs_days = 30
binlog_cache_size = 20M
log-bin = /data/mysql3306/logs/mysql-bin
binlog_format = row

###replication###
#replicate-rewrite-db=cloudaccount->cloudaccount_dz2
log_slave_updates = 1
relay_log_recovery = 1
relay_log_purge = 0
relay_log = /data/mysql3306/logs/mysql-relay-bin
relay_log_index = /data/mysql3306/logs/mysql-relay-bin.index
skip-slave-start
slave-net-timeout = 10
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_master_wait_no_slave = 1
loose_rpl_semi_sync_master_timeout = 1000
#loose_rpl_semi_sync_slave_enabled = 1
#slave_skip_errors = 1396
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 16
master_info_repository = TABLE
relay_log_info_repository = TABLE
slave_pending_jobs_size_max=150M
#MySQL Server layer memory management setting
tmp_table_size = 1024M
max_heap_table_size = 1024M
read_buffer_size = 20M
read_rnd_buffer_size = 50M
sort_buffer_size = 50M
join_buffer_size = 160M
query_cache_size = 0
thread_stack = 2M
thread_handling = pool-of-threads
thread_pool_oversubscribe = 8
#MySQL Server layer transaction management setting
transaction_isolation = READ-COMMITTED
autocommit = ON
log_timestamps=system

#MySQL Server layer log related setting
log_error_verbosity = 3
slow_query_log = ON
long_query_time = 5
slow_query_log_file = /data/mysql3306/logs/mysql.slow
#log_output = 'file,table'
log_output = 'file'
#log_queries_not_using_indexes = 1

#MySQL Server layer other behaviour setting
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
#optimizer_switch='index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=off' ##关闭5.7新特性子查询drived_merge
optimizer_switch = 'derived_merge=off' ##关闭5.7新特性子查询drived_merge
event_scheduler = ON
lower_case_table_names = 1
explicit_defaults_for_timestamp = ON
default-storage-engine = INNODB
##ft_min_word_len = 4

# Statistic
# userstat = ON
# thread_statistics = ON

# MyISAM Engine related setting
key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 2048
myisam_repair_threads = 1
#myisam_recover

#InnoDB Engine related setting
#InnoDB memory management related setting
innodb_buffer_pool_size = 12G
innodb_max_dirty_pages_pct = 90
innodb_sync_array_size = 16
innodb_max_dirty_pages_pct = 90
innodb_sync_array_size = 16

#table open cache related
table_open_cache = 6144
table_open_cache_instances = 16
#innodb_additional_mem_pool_size = 16M ##This variable have been removed MySQL 5.7

#innodb_numa_interleave = 1 ##Only work with Percona 5.6.27 and later

##InnoDB engine I/O related setting
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_flush_method = O_DIRECT

#InnoDB engine File management related setting
innodb_data_file_path = ibdata1:12M:autoextend #10M-->12M, 12M is default values, it is meaningless to set it to 10M
innodb_file_per_table = 1 #this value have been the default value in MySQL 5.7

#InnoDB engine undo log related setting
innodb_undo_directory = /data/mysql3306/data
#innodb_undo_tablespaces = 4
innodb_purge_batch_size = 5000
innodb_purge_threads = 8
innodb_page_cleaners = 8

#InnoDB engine redo log related setting
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 20M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_log_group_home_dir = /data/mysql3306/logs

#InnoDB engine lock and transaction management setting
innodb_lock_wait_timeout = 60

#InnoDB engine other behaviour setting
innodb_large_prefix = ON ##this value have been the default value in MySQL 5.7
innodb_strict_mode = ON ##this value have been the default value in MySQL 5.7
innodb_checksum_algorithm = crc32 ##this value have been the default value in MySQL 5.7


[mysqldump]
quick
max_allowed_packet = 160M

[mysql]
no-auto-rehash
# Only allow UPDATEs and DELETEs that use keys.
#safe-updates

[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

[mysqlhotcopy]
interactive-timeout

EOF

3、启动mysql

/usr/local/mysql5.7/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql
nohup /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf &> /data/mysql3306/logs/runlog.log &

4、修改mysql中root用户密码

defaltpass="$(awk '/temporary password is/{print $NF}' /data/mysql3306/logs/mysqld.log)"
HISTCONTROL=ignorespace
/usr/local/mysql5.7/bin/mysql --connect-expired-password -u root -p"$defaltpass" -S /data/mysql3306/tmp/mysql.sock -e"set password=password('Zhanghaha123'); flush privileges;"

5、配置master+启动slave

IP为master对应IP

/usr/local/mysql5.7/bin/mysql -u root -p'Zhanghaha123' -S /data/mysql3306/tmp/mysql.sock  -e"CHANGE MASTER TO MASTER_HOST='173.20.5.155',master_user='repl',master_password='Repl@2022',master_auto_position=1;"
/usr/local/mysql5.7/bin/mysql -u root -p'Zhanghaha123' -S /data/mysql3306/tmp/mysql.sock -e"start slave;"

6、配置开机自启动

chmod +x /etc/rc.d/rc.local
grep "mysqld_safe" /etc/rc.d/rc.local > /dev/null
echo "nohup /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf &> /data/mysql3306/logs/runlog.log &" >> /etc/rc.d/rc.local

举报

相关推荐

0 条评论