ปัญหามีอยู่ครับย้าย DB จาก Server 1 ไปยัง Server 2
ใช้ config ตัวเดียวกัน space ram cpu เดียวกัน
เช่นมี table A
ถ้าดูใน shell เห็น table A แต่ไม่สามารถ select table A ได้
error : ERROR 1146 (42S02): Table ‘db.A’ doesn’t exist
แต่ถ้าดูใน phpmyadmin ไม่เห็น table A
ได้รอง repair mysql แล้วก็ไม่หาย
format ของ table อื่นเป็น myisam เข้าได้ปกติ ยกเว้น table A เป็น InnoDB
ได้รองหาวิธี convert table A ให้เป็น myisam
เช่น
alter table a engine=MYISAM;
ERROR 1146 (42S02): Table ‘db.A’ doesn’t exist
ช่วยแนะนำด้วยครับไม่รู้จะหาวิธีใหนแล้วครับ
ได้เปิด InnoDB ใน mysql
MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | N
ขอบคุณครับ
iLhay
July 24, 2014, 1:22pm
2
ขอดู /etc/my.cnf หน่อยครับ กรณีหาไม่เจอ อาจจะเป็นเรื่อง Database name ครับ เพราะมันเป็น case sensitive
[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
default_storage_engine = InnoDB
Disabling symbolic-links is recommended to prevent assorted security risks
skip-external-locking
#skip-innodb
character-set-server = tis620
MyISAM
key_buffer_size = 2048M
key_buffer = 1024Mi
#skip-name-resolve
record_buffer =1M
sort_buffer_size =32M
read_buffer_size =2M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
max_tmp_tables = 700M
myisam_recover = FORCE,BACKUP
SAFETY
#max_allowed_packet = 32M
skip_name_resolve
sysdate_is_now = 1
#innodb = FORCE
CACHES AND LIMITS
tmpdir = /var/log/tmp
tmp_table_size = 32M
max_heap_table_size = 32M
#query_cache_type = 0
query_cache_type = 1
query_cache_size = 8M
max_connections = 1500
thread_cache_size = 128
open_files_limit = 65536
table_definition_cache = 4096
table_open_cache = 4096
INNODB
innodb_flush_method = O_DIRECT
innodb_log_files_in_group = 2
innodb_file_per_table = 1
innodb_buffer_pool_size = 1024M
join_buffer_size = 1M
#innodb_force_recovery = 4
table_cache = 8192
log-queries-not-using-indexes =1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysqldump]
quick
max_allowed_packet=512M
#6062014
[mysql]
no-auto-rehash
[isamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M
[myisamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M
[mysqlhotcopy]
interactive-timeout
ตามนี้ครับ
แนะนำด้วยครับขอบคุณครับ
kenjung:
ปัญหามีอยู่ครับย้าย DB จาก Server 1 ไปยัง Server 2
ใช้ config ตัวเดียวกัน space ram cpu เดียวกัน
เช่นมี table A
ถ้าดูใน shell เห็น table A แต่ไม่สามารถ select table A ได้
error : ERROR 1146 (42S02): Table ‘db.A’ doesn’t exist
แต่ถ้าดูใน phpmyadmin ไม่เห็น table A
ได้รอง repair mysql แล้วก็ไม่หาย
format ของ table อื่นเป็น myisam เข้าได้ปกติ ยกเว้น table A เป็น InnoDB
ได้รองหาวิธี convert table A ให้เป็น myisam
เช่น
alter table a engine=MYISAM;
ERROR 1146 (42S02): Table ‘db.A’ doesn’t exist
ช่วยแนะนำด้วยครับไม่รู้จะหาวิธีใหนแล้วครับ
ได้เปิด InnoDB ใน mysql
MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | N
ขอบคุณครับ
ย้ายยังไงครับ
ย้าย ทั้งโฟลเดอร์หรือปล่าว
หรือว่าย้ายนแบบ dump เป็น SQL Command
ย้ายแบบ copy ทั้ง floder ครับเนืื่องจาก mysql มีขนาดใหญ่ ถ้า dump จะนานครับ
InnoDB น่าต้อง dump และ import เอาครับ
ติดตรงข้อมูล เยอะนิละครับ ถ้าจะใช้ dump คำสั่งใหน dump + option คำสั่ง ยังงัยดีครับ หรือว่ามีวิธีที่ dump ข้อมูลได้เร็วหว่านี้
หรือว่า dump แบบ ปกติ
mysqldump -u root -p db > db.sq
เพื่อให้ได้ formate table ที่เป้น innodb มาด้วย
ขอบคุณครับ
icez
July 24, 2014, 2:33pm
8
ย้ายทั้ง folder นี่รวมไฟล์ ibdata / iblogfile ด้วยมั้ยครับ?
น่าจะไม่นะครับ
เพราะ ที่ผมเคยเจอ คนย้ายบอกว่า นึกว่าเป็น log file ของ MySQL เลย ลบทิ้ง ก่อน backup
พอลง DB ใหม่ เอาที่ backup มาลง ก็เป็นอันโบกมือลา DB
ปกติถ้าใช้ mysql dump หรือ backup จะออกมาเป็น SQL ครับ
ไม่รวมครับ เฉพาะ
a.frm
a.ibd
ครับผม
icez
July 24, 2014, 2:40pm
12
ปกติไฟล์ iblog มันลบได้ เอามาแค่ ibdata ก็พอ เพราะ(โดยปกติ)ถ้าไม่ได้ใส่ innodb_file_per_table ตัวข้อมูลตารางจะถุกเก็บในไฟล์ ibdata ด้านนอก folder ฐานข้อมูลครับ
ถ้าจะย้ายเครื่องก็ไปเอาไฟล์นี้มาด้วย ไม่งั้นมันจะขึ้นแบบนั้นแหละ หรือถ้าเอามาไม่ได้ก็ dump เฉพาะตารางนี้ก็ได้
mysqldump --tables --user=USERNAME --password=PASSSWORD DATABASE TABLE | gzip > FILE.sql.gz
icez:
… ลองเอา ibdata มาด้วยฮะ
ครับผมขอบคุณครับ
เดียวรองดูก่อนนะครับ
จะรายงานความครีบหน้าครับ
ต้องเอาไฟล์มาทั้งหมด ตามที่ icez ว่า แต่พี่แนะนำให้ mysqldump นะครับ ชัวร์กว่า และ มันจะระบุ type มาเป็น innodb เหมือนเดิมครับ
icez:
ปกติไฟล์ iblog มันลบได้ เอามาแค่ ibdata ก็พอ เพราะ(โดยปกติ)ถ้าไม่ได้ใส่ innodb_file_per_table ตัวข้อมูลตารางจะถุกเก็บในไฟล์ ibdata ด้านนอก folder ฐานข้อมูลครับ
ถ้าจะย้ายเครื่องก็ไปเอาไฟล์นี้มาด้วย ไม่งั้นมันจะขึ้นแบบนั้นแหละ หรือถ้าเอามาไม่ได้ก็ dump เฉพาะตารางนี้ก็ได้
mysqldump --tables --user=USERNAME --password=PASSSWORD DATABASE TABLE | gzip > FILE.sql.gz
คุณ icez ครับ
ผมดำเนินการ copy ibdata มาแล้วไม่สามารถ start mysql ได้
error ibdata ที่นำมาวางใน mysql แต่ คนละ path datadir ของ mysql
มีส่วนหรือปล่าวครับ
เช่น
ของเดิม
datadir = /home
new
datadir = /var/lib/mysql
Server เดิมยังทำงานได้ไหมครับ
ถ้ายังทำงานได้ก็ dump ข้อมมูลออกมาดีกว่าครับ
ได้ละครับทุกท่านขอบคุณในความช่วยเหลือครับ
ผมเปลี่ยน ชื่อ DB ไปเลยทำให้ไม่ได้ ขอบคุณครับ
แต่ยังเห็น error ใน mysqld.log
140724 15:26:41 InnoDB: Error: page 4166 log sequence number 73 605182932
InnoDB: is in the future! Current system log sequence number 0 44279.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html
InnoDB: for more information.
icez
July 24, 2014, 3:35pm
19
ถ้าก๊อป ibdata มาต้องลบ iblog เครื่องปลายทางทิ้งด้วยครับ