mysql数据库持久化(主从架构)
- 下载mysql包
数据库下载地址:
https://downloads.mysql.com/archives/community/
安装前环境准备
#禁用SeLinux
sudo vi /etc/sysconfig/selinux
将SELINUX=enforcing指令更改为SELINUX=disabled
#移动到安装目录
sudo mkdir /usr/local/mysql
cd /usr/local/src
tar -xzvf ./mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
sudo mv ./mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz/* /usr/local/mysql
#新建用户
sudo groupadd mysql
sudo useradd -g mysql -s /usr/sbin/nologin mysql #不让mysql用户直接登录
sudo chown -R mysql:mysql /usr/local/mysql/
#配置开机自动启动(重要)
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 2345 mysqld on
chkconfig --list mysqld #查看是否已应用上
#添加my.cnf,my.cnf详见下方文件
vim /etc/my.cnf
#添加MySQL的软链接以适应init脚本
ln -sv /usr/local/mysql/bin/mysql /usr/sbin/mysql
ln -sv /usr/local/mysql/bin/mysqladmin /usr/sbin/mysqladmin
ln -sv /usr/local/mysql/bin/mysqldump /usr/sbin/mysqldump
#初始化数据库
/usr/local/mysql/bin/mysqld --initialize --user=mysql
#启动服务
service mysqld start
#查看密码
grep "temporary password" /data/mysql/log/error.log
#重置root密码
mysql -u root -p
use mysql;
update mysql.user set authentication_string=password( '123456') where user='root';
flush privileges;
exit;
#忘记密码修改root密码
vim /etc/my.cnf
[mysqld]下方加入
skip-grant-tables=1
保存退出
systemctl restart mysql
mysql -u root -p 回车
use mysql;
update mysql.user set authentication_string=password( '123456') where user='root';
flush privileges;
exit;
#注释掉 skip-grant-tables=1
systemctl restart mysql #重启服务
mysql -u root -p
#输入上步骤密码,然后执行
ALTER USER USER() IDENTIFIED BY '123456';
my.cnf配置
[client]
port = 3307
socket = /data/mysql/tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
prompt="\u@\\h: \R:\m:\s [\d]> "
no-auto-rehash
[mysqldump]
quick
max_allowed_packet = 32M
[mysqld]
###### BASIC SETTINGS ######
port = 3307
user = mysql
server-id = 113306 ###注:建议为ip主机位+端口号
read_only=OFF
super_read_only=OFF
pid-file = /data/mysql/tmp/mysql.pid
socket = /data/mysql/tmp/mysql.sock
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER
explicit_defaults_for_timestamp = ON
max_allowed_packet = 32M
basedir = /data/mysql/install
tmpdir = /data/mysql/tmp
datadir = /data/mysql/data
character-set-server = utf8mb4
transaction_isolation = READ-COMMITTED
lower_case_table_names = 1
default_time_zone = "+8:00"
# log_warnings = 1
log_error_verbosity = 2
log_bin_trust_function_creators = 1
###### CACHES AND CONNECTS SESSION ######
max_heap_table_size = 4M
query-cache-type = 0
query-cache-size = 0
thread_cache_size = 128
open_files_limit = 65535
table_definition_cache = 2048
table_open_cache = 10240
table_open_cache_instances = 16
read_buffer_size = 4M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
tmp_table_size = 16M
###### CONNECTION SETTINGS ######
interactive_timeout = 300
wait_timeout = 300
lock_wait_timeout = 120
max_connections = 3000
max_user_connections = 0
max_connect_errors = 500
###### LOG SETTINGS ######
log-bin = /data/mysql/binlog/mysql-bin
binlog_format = row
binlog_row_image = full
log_bin_trust_function_creators = 1
relay-log= /data/mysql/relaylog/mysql-relay-bin
log-error = /data/mysql/logs/error.log
slow_query_log = 1
slow_query_log_file = /data/mysql/logs/slow.log
expire_logs_days = 7
long_query_time = 1
log_queries_not_using_indexes =1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 1000
log_slow_admin_statements = 1
log_slow_slave_statements = 1
###### INNODB SETTINGS ######
innodb_data_home_dir = /data/mysql/data/
innodb_temp_data_file_path = ../tmp/ibtemp1:16M:autoextend:max:5G
innodb_data_file_path = ibdata1:128M;ibdata2:128M:autoextend
innodb_undo_logs = 128
innodb_rollback_segments = 128
innodb_undo_log_truncate = ON
innodb_max_undo_log_size = 512M
innodb_page_size = 16384
innodb_page_cleaners = 10
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 4096
innodb_lock_wait_timeout = 50
innodb_io_capacity = 15000
innodb_io_capacity_max = 20000
innodb_flush_method = O_DIRECT
innodb_flush_neighbors = 0
innodb_log_file_size = 500M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 835584
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 0
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_file_per_table = 1
innodb_stats_persistent_sample_pages = 64
innodb_autoinc_lock_mode = 2
innodb_online_alter_log_max_size = 1G
innodb_open_files = 65535
loose_innodb_numa_interleave = 1
innodb_buffer_pool_dump_pct = 40
innodb_purge_rseg_truncate_frequency = 64
innodb_change_buffering = all
innodb_sort_buffer_size = 32M
innodb_checksums = 1
innodb_checksum_algorithm = crc32
innodb_rollback_on_timeout = 1
internal_tmp_disk_storage_engine = InnoDB
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30
innodb_flush_sync = 0
innodb_max_dirty_pages_pct = 50
innodb_stats_on_metadata = 0
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
#从库设置建议
#sync_binlog = 1000
#innodb_flush_log_at_trx_commit = 2
###### REPLICATE ######
relay_log = relay.log
binlog_rows_query_log_events = 1
master_info_repository = TABLE
relay_log_info_repository = TABLE
log_timestamps = SYSTEM
slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'
slave_transaction_retries = 50
slave_net_timeout = 60
relay_log_recovery = ON
binlog_checksum = 1
relay_log_recovery = 1
relay-log-purge = 1
slave_parallel_type = 'LOGICAL_CLOCK'
slave_parallel_workers = 4
slave_preserve_commit_order = ON
#增强半同步
plugin_dir=/data/mysql/install/lib/plugin
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
###### PASSWORD POLICY AND CONNECT CONTROL ######
plugin_dir=/data/mysql/install/lib/plugin
plugin-load-add = validate_password.so
plugin-load-add = connection_control.so
# GTID
gtid_mode = on
log_slave_updates = 1
enforce_gtid_consistency = 1
binlog_gtid_simple_recovery = 1
# Others
skip_name_resolve = 1
back_log = 2048
bind-address = 0.0.0.0
log_timestamps = system
group_concat_max_len = 10240
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
skip_slave_start = 1
max_relay_log_size = 500M
###### PERFORMANCE_SCHEMA SETTINGS ###### PS库设置
performance_schema = 1
performance_schema_instrument = '%=on'
performance_schema_digests_size = 40000
performance_schema_max_table_instances = 40000
performance_schema_max_sql_text_length = 4096
performance_schema_max_digest_length = 4096
performance-schema-instrument='stage/%=ON'
performance-schema-consumer-events-stages-current=ON
performance-schema-consumer-events-stages-history=ON
performance-schema-consumer-events-stages-history-long=ON
performance-schema-consumer-events-transactions-history-long=ON
###### INNODB MONITOR ###### 监控
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
master执行以下语句
#在MySQL主上创建用于备份账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl123';
#给用户赋予权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库ip' IDENTIFIED BY 'repl123' ;
#MySQL主上,查看bin-log的文件名和位置
SHOW MASTER STATUS;
slave 执行以下语句
mysql> stop slave; #执行同步前,要先关闭slave
#master_log_file,master_log_pos参照主库的bin-log文件名和位置
mysql> change master to master_host=‘ip’, master_port=3306, master_user=‘repl’,master_password=‘repl123’,master_log_file=‘mysql-bin.000001’,master_log_pos=120;
mysql> start slave;
mysql> show slave status \G;
…
Slave_IO_Running: Yes
Slave_SQL_Running: Yes