I feel reasonably confident that there's nothing wrong with your MySQL installation, which is why repairing the tables shows no problems found. Those are artifacts of the real problem:
You simply don't have enough memory on your machine to do everything you're trying to do.
From your configuration:
key_buffer = 384M
Between that and the default for innodb_buffer_pool_size of 128M, that's 512M that has to be available all of the time and if it can't be allocated at startup or restart of MySQL, it's not going to start.
131210 13:06:25 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
131210 13:06:25 InnoDB: Completed initialization of buffer pool
131210 13:06:25 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131210 13:06:25 [ERROR] Plugin 'InnoDB' init function returned error.
This isn't a MySQL crash -- it's MySQL failing to start -- or restart -- because there aren't 128MB of free memory available to allocate.
Error 12 is "Out of Memory" -- system memory.
The other messages in your error log are all essentially side-effects.
I suspect that also in your log you will see this:
YYMMDD HH:MM:SS mysqld_safe Number of processes running now: 0
If that error message is not immediately preceded by a crash dump ("MySQL caught signal xx" followed by a stack trace and a lot of debugging information) then it's not likely to be MySQL crashing -- it's MySQL being killed by the kernel to try to keep the whole system from crashing due to a crisis situation related to available memory. Apache's forking model is notorious for this -- as your site becomes busy, Apache spawns more children, each of which has an appetite for memory.
You will probably find evidence of this in your syslogs.
Xxx xx xx:xx:xx [machine name] kernel: Out of memory: Killed process xxxx, UID xx, (mysqld).
The options are to add more memory, or reduce MySQL's memory footprint via configuration, or reduce the number of children Apache can spawn, or eliminate other processes from the system, or separate the database and web server onto different machines, or add more swap -- but a MySQL machine that is swapping is not going to perform optimally.
For similar scenarios, see also: